如何在斯卡拉咖喱功能
问题描述:
我想在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))
}
答
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))
}
对不起,只是出于好奇,什么是参数v的宗旨:双在EVAL?每次结果是3.1,4.1,5.1 – jimakos17 2014-12-21 12:26:22
@ jimakos17它没有被使用。不过,这就是问题所在,所以我保持这种状态。 – 2014-12-21 21:03:22