我已经进行了单元测试来研究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
提前致谢。
答案 0 :(得分:0)
此处supplier: () => Int
supplier
的类型为Function0[Int]
。
但是supplier: => Int
这里supplier
的类型是Int
。
supplier: => Int
(a)和supplier: Int
(b)之间的区别在于,(a)供应商参数通过名称传递到函数中,并且仅进行评估从内部函数访问时。如果(b)在调用函数的行上评估供应商参数。