2010-09-16 99 views
6

返回它我有类型的列表[T]和[B]中阶,与类型的对象E E.修改函数内的多个列表和Scala中

我想使接受的函数这三个参数:

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

但是我知道名单是不可改变的,并传递给函数的任何被视为VAL(不变量)。但是我需要修改t和b并将修改返回给函数的调用者。有没有人有任何想法如何做到这一点?

我不能去,因为我一直在到处使用它,该文件是这么大列表更改为阵......

回答

15

您使用较高的应该修改tb在功能方式为了功能,如mapfilter,......并把他们的结果为新val S(例如modifiedTmodifiedB)。然后,您可以使用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进行计算,以便将计算时间移到稍后的时间点。

+3

你需要一个'='E的':E)'和''{如果你要返回的东西。 – 2010-09-16 14:22:12

+0

你是对的雷克斯,谢谢。我不知道多少次我忘记了这个在Scala中的小'='... – 2010-09-16 18:25:36

+0

谢谢你,michael! – 2010-09-17 02:35:32