2009-09-18 5 views
12

Я пытаюсь вызвать функцию 2 параметров в List.foreach, с первым параметром исправлено для цикла. На самом деле я хочу, чтобы снискать функцию двух параметров в зависимости от одного параметра, который возвращает функцию одного параметра (как List.foldLeft)Как выполнить функцию в Scala

Это не работает:

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

+0

@ jimakos17 Он не используется. Так было в этом вопросе, поэтому я сохранил это так. –

 Смежные вопросы

  • Нет связанных вопросов^_^