【发布时间】:2013-09-04 08:13:51
【问题描述】:
我正在研究与 Scala in Action 相关的代码示例http://www.manning.com/raychaudhuri/
引用https://github.com/nraychaudhuri/scalainaction/blob/master/chap01/LoopTill.scala
// Run with >scala LoopTill.scala or
// run with the REPL in chap01/ via
// scala> :load LoopTill.scala
object LoopTillExample extends App {
def loopTill(cond: => Boolean)(body: => Unit): Unit = {
if (cond) {
body
loopTill(cond)(body)
}
}
var i = 10
loopTill (i > 0) {
println(i)
i -= 1
}
}
在上面的代码中cond: => Boolean 是我感到困惑的地方。当我将其更改为 cond:() => Boolean 时,它失败了。
谁能解释一下
cond: => Boolean
和
cond:() => Boolean
它们不是都代表函数的参数吗?
【问题讨论】:
-
它们本质上是一样的。它们都编译为 Function0[Boolean]。唯一的区别是 call-by-name (cond: => Boolean) 有点短,因为你不需要写 loopTill(() => i > 0)(...)
标签: scala