Max*_*ime 12 functional-programming scala currying
我正在尝试在List.foreach中调用2参数函数,并为循环修复第一个参数.实际上我想把两个参数的函数调成一个参数的函数,该函数返回一个参数的函数(如List.foldLeft do)
这不起作用:
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))
}
Run Code Online (Sandbox Code Playgroud)
这有效:
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))
}
Run Code Online (Sandbox Code Playgroud)
但是我不想改变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))
}
Run Code Online (Sandbox Code Playgroud)
Dan*_*ral 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, _))
}
Run Code Online (Sandbox Code Playgroud)
下划线,Scala通配符!
作为一个小小的好奇心,这也将起作用:
def eval(v: Double) = {
List(1.0, 2.0, 3.0).foreach(Function.curried(mathFunc1 _)(2.1))
}
Run Code Online (Sandbox Code Playgroud)
甚至:
val curriedMathFunc1 = Function.curried(mathFunc1 _)
def eval(v: Double) = {
List(1.0, 2.0, 3.0).foreach(curriedMathFunc1(2.1))
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2373 次 |
| 最近记录: |