gpt4 book ai didi

Scala - 类型 T 或 => T 的参数

转载 作者:行者123 更新时间:2023-12-03 18:16:24 26 4
gpt4 key购买 nike

以下有什么区别吗

def foo(s: String) = { ... }


def foo(s: => String) { ... }

这两个定义都接受“sss”作为参数。

最佳答案

一个论点 Stringby-value参数,=> Stringby-name范围。在第一种情况下,字符串被传入,在第二种情况下,一个所谓的 thunk其计算结果为 String无论何时使用。

def stringGen: String = util.Random.nextInt().toString

def byValue(s: String) =
println("We have a '" + s + "' and a '" + s + "'")

def byName(s: => String) =
println("We have a '" + s + "' and a '" + s + "'")

byValue(stringGen) // constant value
byName (stringGen) // evaluated twice

通常不使用按名称参数对其进行多次评估,而是懒惰地评估一次。
def logMessage = {
println("Calculating log message...")
new java.util.Date().toString
}

def log(enabled: Boolean, message: => String): Unit = {
lazy val fullMessage = "LOG: " + message
println("Test")
if (enabled) println(fullMessage)
}

log(false, logMessage)
log(true , logMessage)

关于Scala - 类型 T 或 => T 的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11992134/

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