2009-09-18 11 views
12

Próbuję wywołać funkcję 2 parametry w List.foreach, z pierwszym parametrem ustalona dla pętli. W rzeczywistości chcę curry funkcji dwóch parametrów w zależności od jednego parametru, która zwraca funkcję jednego parametru (jak List.foldLeft zrobić)Jak curry funkcja w Scala

To nie działa:

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)) 
} 

To działa:

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)) 
} 

Ale nie chcę, aby zmienić podpis mathFunc1, więc chcę zrobić coś takiego:

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)) 
} 

Odpowiedz

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, _)) 
} 

Podkreślenie, wilder Scala!

Jako moll ciekawości, to będzie też działać:

def eval(v: Double) = { 
    List(1.0, 2.0, 3.0).foreach(Function.curried(mathFunc1 _)(2.1)) 
} 

lub nawet:

val curriedMathFunc1 = Function.curried(mathFunc1 _) 
def eval(v: Double) = { 
    List(1.0, 2.0, 3.0).foreach(curriedMathFunc1(2.1)) 
} 
+0

Przepraszam, po prostu z ciekawości, co jest celem tego parametru V: Pokój w eval? Za każdym razem, gdy wyniki są 3.1, 4.1, 5.1 – jimakos17

+0

@ jimakos17 To nie jest używane. Tak właśnie było w tej kwestii, więc zachowałem to w ten sposób. –

Powiązane problemy