19

来自维基百科:

懒惰的评价是:

在编程语言理论中,惰性求值或按需调用是一种求值策略,它将表达式的求值延迟到需要它的值为止

短路评估为:

短路求值、最小求值或麦卡锡求值表示某些编程语言中某些布尔运算符的语义,其中仅在第一个参数不足以确定表达式的值时才执行或评估第二个参数

那么它们之间有什么区别,例如当我有:

if(false && true && true) {
    //boo
} 

据我所知,编译器不会在之后执行表达式,false因为我有&&所以整个表达式将是false最终的。(对?)

那么这种行为称为延迟评估还是短路评估

4

1 回答 1

20

不同之处在于,在惰性求值的情况下,仅在需要时才对表达式进行求值,而在短路求值的情况下,表达式求值会在您知道结果后立即停止。这是一种正交的概念。

惰性求值可应用于任何计算(短路方案通常仅与布尔值一起使用)。它不会切断无用的计算,而是延迟整个计算,直到需要它的结果。

variable = bigAndSlowFunc() or evenSlowerFnc()
if (carry out heavy computations)
  print "Here it is: ", variable
else
  print "As you wish :-)"

如果评估是惰性的,variable则仅当我们选择进入 的第一个 ( then) 分支时才会计算if,否则不会。在评估阶段(当我们为 准备参数时print)短路方案可用于决定是否需要调用evenSlowerFnc.

因此,在您的示例中,这是短路评估,因为没有发生计算延迟。

于 2013-02-16T09:27:06.830 回答