def mayBeTwice(b:Boolean,i: =>Int) = {
val j = i
if (b) j+j else 0
}
def mayBeTwice(b:Boolean,i: =>Int) = {
lazy val j = i
if (b) j+j else 0
}
val x=Stream.mayBeTwice(true,{println("hi");41+1})
上面的代码执行是相同的结果,但这不是Scala书中函数式编程中描述的内容。
答案 0 :(得分:0)
它与您在本书中的内容有何不同? pkg install --accept --licenses perl-512
pkg install --accept --licenses perl-522
pkg install golang-17
延迟评估,直到第一次使用。您的代码看起来可能相同,但它们是不同的。当您发送false时,永远不会评估lazy val
。这可能会澄清:
j
来自REPL:
def mayBeTwice(b:Boolean, i:Int) = {
lazy val j = { println("hi"); i }
if (b) j+j else 0
}
在第二种情况下,j永远不会被评估。