В Scala почему-то, что каррическая функция может быть легко передана непосредственно другим функциям, но при назначении ей val
необходимо также частично применить ее с помощью _
? Например, если две функции:Почему 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
с учетом определения типа исходного метода?
В случае с «val», если вы даете аннотацию типа, вам не понадобится открытое частичное приложение '_'. –