文献资料表示OR逻辑运算符应该短路:
如果已知发生的概率,则应将它们从最有可能发生的情况排序到最不可能发生的情况,因为一旦复合或条件的任何部分计算为真,则表达式的其余部分将绕过。
除非我弄错了,否则这不是预期的行为。当它必须计算返回TRUE的表达式时,它似乎继续计算OR之后的下一个表达式。对于一个硬编码的TRUE值,它似乎像预期的那样工作。
我是不是做错了什么或误解了代码/文档?
考虑以下代码:
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"
);https://stackoverflow.com/questions/40042784
复制相似问题