我在scala中有一个类型为[T]和[B]的列表,对象类型为E。
我想制作一个接受这三个参数的函数:
def doSomething(t : List[T], b List[B], e : E) {
... }
但是我意识到List是不可变的,传递给函数的任何东西都被视为val(而不是var)。但是我需要修改t和b并将修改返回给函数的调用者。有谁知道如何做到这一点?
我无法将列表更改为数组...因为我到处都在使用它,所以文件很大。
请您参考如下方法:
您应该使用诸如t,b,...之类的高阶函数以功能方式修改map和filter,并将它们的结果放入新的val s中(例如modifiedT,modifiedB)。然后,您可以使用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]]
}
然后,在调用方法中,您可以通过以下方式分配值:
val (t2, b2) = doSomething(t, b, e)
当然,这取决于您对“修改”的含义。
如果此修改很复杂,则应考虑使用
view使计算变得懒惰,以将计算时间移至稍后的时间点。




