W Scala, dlaczego funkcja curried może być łatwo przekazana bezpośrednio do innych funkcji, ale przy przypisaniu jej do val
trzeba również częściowo zastosować ją z _
? Na przykład, biorąc pod uwagę dwie funkcje:Dlaczego Scala wymaga częściowego zastosowania funkcji curry podczas przypisywania wartości val?
def curried(a: Int)(b: Int) = a + b
def test(a: Int, f: Int => Int) = f(a)
mogę łatwo przejść curried
do test
z:
test(5, curried(5))
i wszystko jest szczęśliwy. Jednak jeśli ja po prostu zadzwonić curried(5)
pojawia się błąd:
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)
Jeśli zmienię wywołanie zawierać informacje o typie jednak to działa:
val 'curried: Int => Int = curried(5)
Może ktoś wyjaśnić racjonalnie za niespójność, na pewno Scala kompilator może wnioskować, że funkcja jest Int => Int
ze względu na definicję typu w oryginalnej metodzie?
W przypadku 'val', jeśli podasz adnotację typu, nie będziesz potrzebować jawnej częściowej aplikacji' _'. –