Как выполнить функцию в Scala
Я пытаюсь вызвать функцию 2 параметров в List.foreach, с первым параметром, установленным для цикла. На самом деле я хочу выполнить функцию двух параметров в функцию одного параметра, которая возвращает функцию одного параметра (как 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))
}
Это работает:
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))
}
Ответы
Ответ 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))
}