2009-09-18 166 views
12

我想在List.foreach中調用2參數函數,第一個參數修復了的一個循環。其實我是想討好兩個參數的函數到返回一個參數的函數,一個參數的函數(如List.foldLeft做)如何在斯卡拉咖喱功能

這不起作用:

private def mathFunc1(a: Double, b: Double) = 
    println(a + b) 


def eval(v: Double) = { 
    List(1.0, 2.0, 3.0).foreach(mathFunc1(2.1)) 
} 

這工作:

private def mathFunc2(a: Double)(b: Double) = 
    println(a + b) 


def eval(v: Double) = { 
    List(1.0, 2.0, 3.0).foreach(mathFunc2(2.1)) 
} 

但我並不想改變mathFunc1的簽名,所以我想要做的事,如:

private def mathFunc1(a: Double, b: Double) = 
    println(a + b) 


def eval(v: Double) = { 
    List(1.0, 2.0, 3.0).foreach(CONVERT_TWO_PARAMS_TO_ONE_ONE(mathFunc1)(2.1)) 
} 

回答

18
private def mathFunc1(a: Double, b: Double) = 
    println(a + b) 


def eval(v: Double) = { 
    List(1.0, 2.0, 3.0).foreach(mathFunc1(2.1, _)) 
} 

下劃線,Scala通配符!

作爲未成年人的好奇心,這也將工作:

def eval(v: Double) = { 
    List(1.0, 2.0, 3.0).foreach(Function.curried(mathFunc1 _)(2.1)) 
} 

甚至:

val curriedMathFunc1 = Function.curried(mathFunc1 _) 
def eval(v: Double) = { 
    List(1.0, 2.0, 3.0).foreach(curriedMathFunc1(2.1)) 
} 
+0

對不起,只是出於好奇,什麼是參數v的宗旨:雙在EVAL?每次結果是3.1,4.1,5.1 – jimakos17 2014-12-21 12:26:22

+0

@ jimakos17它沒有被使用。不過,這就是問題所在,所以我保持這種狀態。 – 2014-12-21 21:03:22