В Scala, почему он может быть легко передан непосредственно в другие функции, но при назначении ему val
нужно также частично применить его с помощью _
? Например, учитывая две функции:
def curried(a: Int)(b: Int) = a + b
def test(a: Int, f: Int => Int) = f(a)
Я могу легко передать curried
в test
с помощью:
test(5, curried(5))
и все счастливо. Однако, если я просто вызываю curried(5)
, я получаю сообщение об ошибке:
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)
Если я изменяю вызов для включения информации о типе, он работает:
val 'curried: Int => Int = curried(5)
Может ли кто-нибудь объяснить рациональность непоследовательности, конечно, компилятор Scala может сделать вывод о том, что функция Int => Int
задана определением типа в исходном методе?