Ich habe mehrere Fragen im Zusammenhang mit Curry-Funktion. Hier frage ich sie eins nach dem anderenCurry-Funktion verwandte Fragen in Scala
1) http://twitter.github.com/scala_school/basics.html gibt ein Beispiel für Curry-Funktion - ich dachte, es ist eine Funktionsdefinition, aber eigentlich ist es nicht. Die REPL erkennt dies nicht als gültige Aussage an.
multiplyThenFilter { m: Int => m * 2 } { n: Int => n < 5}
2) Warum können wir eine Funktion nicht aus einer partiell parametrisierten Methode definieren? Was ist mit der folgenden Definition falsch?
scala> def multiply(m: Int, n: Int): Int = m * n
multiply: (m: Int, n: Int)Int
scala> val timesTwo = multiply(2,_)
<console>:11: error: missing parameter type for expanded function ((x$1) => multiply(2, x$1))
val timesTwo = multiply(2,_)
^
3) Warum können wir eine teilweise parametrisierte Funktion nicht curried machen? Was ist mit der folgenden Definition falsch?
scala> (multiply(_,_)).curried
res13: Int => (Int => Int) = <function1> // THIS IS OK
scala> (multiply(20,_)).curried
<console>:12: error: missing parameter type for expanded function ((x$1) => multiply(20, x$1))
(multiply(20,_)).curried
^
1) Es ist ungültig, weil es zuerst deklariert werden muss. Zum Beispiel: 'def multiplyThenFilter (a: Int => Int) (b: Int => Boolean) = {Liste (1,2,3,4) .map (a).filter (b)} –
1) Der multiplyThenFilter ist jetzt weg. Du warst nicht die einzige Person, die davon verwirrt war :-) –