首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >延迟评估和短路评估有什么区别吗?

延迟评估和短路评估有什么区别吗?
EN

Stack Overflow用户
提问于 2013-02-16 08:45:04
回答 1查看 4.4K关注 0票数 20

维基百科:

懒惰评价是:

在程序设计语言理论中,延迟计算或按需要调用是一种评估策略,它将表达式的计算延迟到需要它的值为止。

短路评估是:

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

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

代码语言:javascript
运行
复制
if(false && true && true) {
    //boo
} 

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

因此,这种行为被称为延迟评估短路评估

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-02-16 09:27:06

区别在于,在惰性评估的情况下,表达式只在需要时才被评估,而在短路评估的情况下,表达式评估就会在知道结果之后立即停止。这是一种正交概念。

懒惰评估可以应用于任何计算(短路方案通常只用于bools)。它没有切断无用的计算,但是将整个计算延迟到需要它的结果时。

代码语言:javascript
运行
复制
variable = bigAndSlowFunc() or evenSlowerFnc()
if (carry out heavy computations)
  print "Here it is: ", variable
else
  print "As you wish :-)"

如果评估是懒惰的,那么只有当我们选择进入variable的第一个(then)分支时,才会计算它,否则就不会计算。在评估阶段(当我们为print准备参数时),可以使用短路方案来决定是否需要调用evenSlowerFnc

所以在你的例子中,这是短路评估,因为没有延迟的计算发生。

票数 21
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14908548

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档