String) = {-6ren">
gpt4 book ai didi

scala - 在 Scala 中,什么时候是使用惰性求值参数而不是使用函数作为参数的好时机?

转载 作者:行者123 更新时间:2023-12-04 17:49:42 24 4
gpt4 key购买 nike

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 中,什么时候是使用惰性求值参数而不是使用函数作为参数的好时机?

最佳答案

你的观察是正确的。 lazyHelloanoyHello事实上是一样的。这是因为 para: => Stringpara: () => String 的简写.

另一种看待这个的方式:
() => String是一个不带参数并返回一个字符串的函数。
=> String是评估为字符串的东西,不带参数。所以本质上 call-by-name 是一个没有输入参数的函数。

关于scala - 在 Scala 中,什么时候是使用惰性求值参数而不是使用函数作为参数的好时机?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20072194/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com