[英]scala function literal confusion
我已经进行了单元测试来研究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)
}
为什么takeFunctionLiteral
println(suppiler.apply())
在takeFunctionLiteral
语法不正确? 两者都不相等吗? 之间有什么区别
supplier: () => Int
和
supplier: => Int
提前致谢。
这里的supplier: () => Int
supplier
的类型是Function0[Int]
。 但是,这里supplier: => Int
了类型supplier
是一个Int
。
supplier: => Int
(a)和supplier: Int
(b)之间的区别在于,如果(a)供应商参数按名称传递到函数中,并且仅当从内部函数访问时才进行评估。 在情况(b)中,在调用函数的行上评估供应商参数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.