在python中我可以简单地定义一个这样的函数:
def func(lst):
lst[0] = lst[0] + 5
return lst
这个'lst'可以将不同长度的列表作为参数。
如何使用元组在Scala中执行此操作?
注意:我正在尝试在Scala中实现一个用Python编写的Spark程序(或通用库)。在该程序中有这个函数,它将RDD中的每条记录作为参数,对它进行操作然后返回它。现在这些记录的长度可以根据调用函数的RDD而变化。
答案 0 :(得分:2)
与您描述的python函数完全等效,如下所示:
def func(list: List[Any]) = list.headOption.map {
_.asInstanceOf[Int] + 5
} ++ list.tail
但不要这样做。键入安全性(能够在编译时确保您正在查看的数据与您期望的数据完全相同)是开始使用scala而不是python的最大原因之一。
如果你不打算使用它,为什么还要在scala中重写你的python代码呢?只需使用你拥有的东西。
答案 1 :(得分:0)
你可以这样做:
def add5ToHead(list: List[Int]) = {
list match {
case head :: tail => head+5 :: tail
case l => l
}
}
答案 2 :(得分:0)
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)