修改函数内的多个列表并在Scala中返回它

时间:2010-09-16 07:23:51

标签: list scala functional-programming

我在scala中有一个类型[T]和[B]的列表,对象e是E类型。

我想创建一个接受这三个参数的函数:

def doSomething(t : List[T], b List[B], e : E) {
 ... }

但是我意识到List是不可变的,传递给函数的任何东西都被认为是val(不是var)。但我需要修改t和b并将修改返回给函数的调用者。有谁知道如何做到这一点?

我无法将列表更改为数组...因为我一直在使用它而且文件太大了..

1 个答案:

答案 0 :(得分:15)

您应该使用更高阶函数(例如tb,...)以函数方式修改mapfilter,并将结果放入新{ {1}} s(例如valmodifiedT)。然后,您可以使用modifiedB从方法中返回2个值。

Tuple2

在调用方法中,您可以这样分配值:

def doSomething(t: List[T], b: List[B], e: E) = {
  // somehting you want to do
  val modifiedT = t.map(...).filter(...)
  val modifiedB = b.map(...).filter(...)
  (modifiedT, modifiedB) // returns a Tuple2[List[T], List[B]]
}

当然,这取决于你对“修改”的意思。 如果这种修改很复杂,你应该考虑使用val (t2, b2) = doSomething(t, b, e) 使计算变得懒惰,以便将计算时间转移到以后的某个时间点。