首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >HPCC-ECL逻辑运算符-为什么是短路还是不短路?

HPCC-ECL逻辑运算符-为什么是短路还是不短路?
EN

Stack Overflow用户
提问于 2016-10-14 12:05:59
回答 1查看 102关注 0票数 1

文献资料表示OR逻辑运算符应该短路:

如果已知发生的概率,则应将它们从最有可能发生的情况排序到最不可能发生的情况,因为一旦复合或条件的任何部分计算为真,则表达式的其余部分将绕过

除非我弄错了,否则这不是预期的行为。当它必须计算返回TRUE的表达式时,它似乎继续计算OR之后的下一个表达式。对于一个硬编码的TRUE值,它似乎像预期的那样工作。

我是不是做错了什么或误解了代码/文档?

考虑以下代码:

代码语言:javascript
复制
IMPORT STD;
superFileName   := 'temp::superFile';
fileName        := 'temp::regularFile';
returnsTrue     := ~STD.File.FileExists(fileName, TRUE); // File does not exist, so will return true as expression is negated
getSubCount     := NOTHOR(STD.File.GetSuperFileSubCount(superFileName)) > 0; // "Could not locate superfile: thor::nonExistent"

deleteFile      := STD.File.DeleteLogicalFile(fileName);
deleteSuperFile := STD.File.DeleteSuperFile(superFileName);

SEQUENTIAL(
  deleteFile,
  deleteSuperFile,
  OUTPUT(returnsTrue), // true
  OUTPUT(IF ((TRUE OR getSubCount), 'true', 'false')), // 'true'
  OUTPUT(IF ((returnsTrue OR getSubCount), 'true', 'false')), // "Could not locate superfile: thor::temp::superFile"
);
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-19 13:58:58

在HPCC论坛主题这里上提供的答复表明,这是一个已知的问题:

在这种情况下,您的getSubCount定义是一个操作,编译器在一个条件下执行所有操作是一个已知的问题。

我为这个这里提出了一个错误,但是我想这个问题的答案是“它应该短路,但它不是”。

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

https://stackoverflow.com/questions/40042784

复制
相关文章

相似问题

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