Скала функция буквальная путаница
Я провел модульный тест для изучения буквенного формата функции Scala и нашел его довольно запутанным. Не могли бы вы помочь мне понять значение другого синтаксиса?
@Test def supplierLiteral: Unit = {
object Taker {
def takeFunctionLiteral(supplier: => Int): Unit = {
println("taker takes")
// println(supplier.apply()) //can't compile
println(supplier)
}
def takeExplicitFunction0(supplier: () => Int): Unit = {
println("taker takes")
println(supplier())
}
}
val give5: () => Int = () => {
println("giver gives")
5
}
println(give5.isInstanceOf[Function0[_]])
Taker.takeFunctionLiteral(give5) //can't compile, expected Int
println()
Taker.takeExplicitFunction0(give5)
}
Почему println(suppiler.apply())
неверный синтаксис в takeFunctionLiteral
? Разве оба не эквивалентны? В чем разница между
supplier: () => Int
а также
supplier: => Int
Заранее спасибо.
1 ответ
Вот supplier: () => Int
тип supplier
это Function0[Int]
, Но здесь supplier: => Int
тип supplier
является Int
,
Разница между supplier: => Int
(а) и supplier: Int
(б) заключается в том, что в случае (а) параметр поставщика передается в функцию по имени и будет оцениваться только при доступе изнутри функции. В случае (b) параметр поставщика оценивается в строке, где вызывается функция.