来自维基百科:
惰性评估 http://en.wikipedia.org/wiki/Lazy_evaluation is:
在编程语言理论中,惰性求值或按需调用是
延迟表达式求值的求值策略
直到需要它的值为止
短路评估 http://en.wikipedia.org/wiki/Short-circuit_evaluation is:
短路评估、最小评估或 McCarthy 评估
表示某些编程中某些布尔运算符的语义
仅执行或评估第二个参数的语言
如果第一个参数不足以确定
表达
那么它们之间有什么区别,例如当我有:
if(false && true && true) {
//boo
}
据我所知,编译器不会在之后执行表达式false
因为我有&&
所以整个表达式将是false
最后。 (正确的?)
那么这种行为就叫做惰性评估 or 短路评估?
不同之处在于,在惰性求值的情况下,仅在需要时才对表达式求值,而在短路求值的情况下,表达式求值在您知道结果后立即停止。这是一种正交的概念。
惰性求值可以应用于任何计算(短路方案通常仅与布尔值一起使用)。它不会切断无用的计算,而是延迟整个计算,直到需要其结果为止。
variable = bigAndSlowFunc() or evenSlowerFnc()
if (carry out heavy computations)
print "Here it is: ", variable
else
print "As you wish :-)"
如果评估是懒惰的,variable
仅当我们选择进入第一个(then
) 的分支if
,否则不会。在评估阶段(当我们准备论证时print
) 可以使用短路方案来决定是否需要调用evenSlowerFnc
.
因此,在您的示例中,它是短路评估,因为没有发生计算延迟。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)