def getStr(): String = {
println("getStr is running")
"str"
}
def lazyHello(para: => String) = {
println("lazy hello is runing")
println(para)
}
def notLazyHello(para: String) = {
println("not lazy hello is runing")
println(para)
}
def anoyHello(para: () => String) = {
println("anoy hello is runing")
println(para())
}
notLazyHello(getStr)
lazyHello(getStr)
anoyHello(getStr)
得到这个结果:
scala> notLazyHello(getStr)
getStr is running
not lazy hello is runing
str
scala> lazyHello(getStr)
lazy hello is runing
getStr is running
str
scala> anoyHello(getStr)
anoy hello is runing
getStr is running
str
似乎 lazyHello 和 anonyHello 执行相同的操作。
那么,在 Scala 中,什么时候是使用惰性求值参数而不是使用函数作为参数的好时机?
最佳答案
你的观察是正确的。 lazyHello
和 anoyHello
事实上是一样的。这是因为 para: => String
是 para: () => String
的简写.
另一种看待这个的方式:() => String
是一个不带参数并返回一个字符串的函数。=> String
是评估为字符串的东西,不带参数。所以本质上 call-by-name 是一个没有输入参数的函数。
关于scala - 在 Scala 中,什么时候是使用惰性求值参数而不是使用函数作为参数的好时机?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20072194/