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

Enr*_*tyo 6 functional-programming scala list

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

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

def doSomething(t : List[T], b List[B], e : E) {
 ... }
Run Code Online (Sandbox Code Playgroud)

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

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

mic*_*ebe 15

你应该修改t,并b在功能使用方式类似高阶函数map,filter......并把他们的结果为新的valS(例如modifiedT,modifiedB).然后,您可以使用a Tuple2从方法返回2个值.

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]]
}
Run Code Online (Sandbox Code Playgroud)

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

val (t2, b2) = doSomething(t, b, e)
Run Code Online (Sandbox Code Playgroud)

当然这取决于你对"修改"的意思.如果这种修改很复杂,你应该考虑使用view懒惰计算将计算时间移到以后的某个时间点.

  • 如果你要返回一些东西,你需要在`e:E)`和`{`之间使用`=`. (3认同)