scala:将元组引用传递给函数

Posted

技术标签:

【中文标题】scala:将元组引用传递给函数【英文标题】:scala: pass tuple reference to function 【发布时间】:2016-12-16 14:49:50 【问题描述】:

在python中我可以简单地定义一个这样的函数:

def func(lst):  
   lst[0] = lst[0] + 5  
   return lst  

这个 'lst' 可以将不同长度的列表作为参数。

如何在 Scala 中使用元组?

注意:我正在尝试在 Scala 中实现一个用 Python 编写的 Spark 程序(或通用库)。在那个程序中有这个函数,它把 RDD 中的每条记录作为参数,对其进行操作,然后返回它。现在这些记录的长度可以根据调用函数的 RDD 有所不同。

【问题讨论】:

【参考方案1】:

与您描述的 python 函数完全等价的内容如下所示:

 def func(list: List[Any]) =  list.headOption.map  
  _.asInstanceOf[Int] + 5 
  ++ list.tail

但不要这样做。类型安全(能够在编译时确保您正在查看的数据正是您期望的类型)是选择 scala 而不是 python 的最大原因之一。

如果您不打算使用它,为什么还要在 scala 中重写您的 python 代码?就用你所拥有的吧。

【讨论】:

【参考方案2】:

你可以这样做:

def add5ToHead(list: List[Int]) = 
  list match 
    case head :: tail => head+5 :: tail
    case l => l
  

【讨论】:

唯一的问题是 List/Tuple 的元素可以是不同的类型。所以它必须是一个元组。【参考方案3】:

copy 方法可能非常适合您的情况:

def func1(t: (Int, Int, Int)) = t.copy(_1 = t._1 + 5)

Int 类型和+5 只是一个示例,您可以通过额外的参数传入值和类型。

您也可以将PartialFunction 应用于您的方法,例如:

val partialFunc1: PartialFunction[Int, Int] = 
    case x => x + 5


def func1(t: (Int, Int, Int), f: PartialFunction[Int, Int]) = t.copy(_1 = f(t._1))

func1((1,2,3), partialFunc1) // output will be (6,2,3)

【讨论】:

以上是关于scala:将元组引用传递给函数的主要内容,如果未能解决你的问题,请参考以下文章

将元组作为命令行参数传递

通过引用传递给构造函数

通过值或常量引用传递给函数?

通过引用将字符串数组传递给 C 函数

Javascript 是不是通过引用或值将数组传递给函数?

通过指针或引用将映射传递给函数?