In Scala, warum kann eine Curry-Funktion einfach direkt an andere Funktionen übergeben werden, aber wenn es zu einer val
zugewiesen wird, muss man es auch teilweise mit _
anwenden? Zum Beispiel die beiden Funktionen gegeben:Warum benötigt Scala die teilweise Anwendung von Curry-Funktionen bei der Zuweisung zu einem Wert?
test(5, curried(5))
und alles ist glücklich:
def curried(a: Int)(b: Int) = a + b
def test(a: Int, f: Int => Int) = f(a)
ich leicht curried
-test
mit passieren kann. Allerdings, wenn ich einfach curried(5)
nenne ich eine Fehlermeldung erhalten:
scala> curried(5)
<console>:9: error: missing arguments for method curried;
follow this method with `_' if you want to treat it as a partially applied function
curried(5)
Wenn ich den Anruf ändern jedoch Typinformationen enthalten, es funktioniert:
val 'curried: Int => Int = curried(5)
jemand das rationale hinter der Inkonsistenz erklären kann, sicherlich die Scala-Compiler kann folgern, dass die Funktion Int => Int
angesichts der Typdefinition der ursprünglichen Methode ist?
Im 'val'-Fall, wenn Sie einen Typ Annotation geben, brauchen Sie die offene partielle Anwendung' _' nicht. –