Как выложить функцию в Scala - PullRequest
       26

Как выложить функцию в Scala

12 голосов
/ 19 сентября 2009

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

1 Ответ

18 голосов
/ 19 сентября 2009
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))
}
...