2010-09-16 28 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