2010-07-06 43 views
3
def mainCaller() = { 
    val name = "xyz" 
    someList.foreach { u:Map => foo(name, u) } 
} 

def foo(name:String)(map:Map): Unit = { 
    //match case.... 
    //recursive call to foo in each case where name remains same, but map changes 
} 

我怎麼能寫FOO作爲一個部分應用功能,在這裏我不必在每一個遞歸調用傳遞的名字,只是叫foo(map1)部分應用遞歸函數

回答

8

兩個選項:

def foo(name:String)(map:Map): Unit = { 
    val bar = foo(name)_ 
    //match case... 
    // case 1: 
    bar(x) 

    // case 2: 
    bar(y) 
} 

或者:

def foo(name:String): Map => Unit = { 
    def bar(map: Map): Unit = { 
     //match case... 
     // case 1: 
     bar(x) 

     // case 2: 
     bar(y) 
    } 
    bar 
} 
+0

只是輝煌! 這兩者有什麼優點和缺點。 第一種方法看起來更清潔。 – scout 2010-07-06 00:32:03

+0

@scout:我想不出任何(dis)優點。我犯了一個錯誤順便說一句。在第一個例子中,它需要'foo(name)'後面的下劃線。 – sepp2k 2010-07-06 00:37:13