Последний случай является частично примененной функцией. Я чувствую, что я сейчас слишком широк, поэтому я остановлюсь здесь. Я надеюсь, что это помогло.
кто-нибудь дать однозначный ответ о том, как по названию параметров=> T
а такжеFunction0
параметры() => T
превращаются друг в друга компилятором Scala? Я знаю, что они не одинаковы, но разница очень тонкая, поскольку они могут взаимозаменяемо использоваться во многих сценариях.
Пример: если я определю
def someFunction: Int = 2
def f(x: => Int): Unit = println(x)
тогда я могу успешно позвонить
f(2)
f(someFunction)
Как() => Int
приемлемая замена для=> Int
?
В более общем смысле это() => T
универсально приемлемая замена имени=> T
параметр?
Также, пожалуйста, поправьте меня, если я ошибаюсь по следующим причинам:=> T
никогда не является приемлемой заменой() => T
потому что первый тип значения (T
), другой тип функции. Это если у меня естьdef f(x: () => Int)
Я никогда не смогу передатьInt
или ленивыйInt
(в любом случае даже не имеет смысла, так как нет ленивых типов).