Bob*_*r02 4 scala function-parameter
以下是否有任何区别
def foo(s: String) = { ... }
Run Code Online (Sandbox Code Playgroud)
和
def foo(s: => String) { ... }
Run Code Online (Sandbox Code Playgroud)
这两个定义都接受"sss"作为参数.
0__*_*0__ 18
参数String是一个by-value参数,=> String是一个by-name参数.在第一种情况下,该字符串传递中,在第二所谓的形实转换其计算结果为一个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
Run Code Online (Sandbox Code Playgroud)
通常不使用by-name参数多次评估它,而是懒惰地评估它一次.
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)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1029 次 |
| 最近记录: |