function A: Boolean;
function B: Boolean;
我(不小心)写了这个:
A or B;
而不是:
if not A then
B;
编译器拒绝第一种形式,我很好奇为什么?
通过短路评估,他们都会做同样的事情,不是吗?
澄清:我想知道为什么该语言的设计不允许我以陈述的形式表达。
最佳答案
第一个是表达式。表达式被求值。表达式没有明显的副作用(例如读取或写入变量)。表达式的两个操作数都是函数,它们可能会产生副作用,但为了产生副作用,必须执行一条语句。
第二个是声明。它比较表达式的结果,并根据评估结果调用另一个函数。
令人困惑的部分是,在这种情况下,Delphi 允许我们忽略函数的结果并将其作为函数执行。因此,您期望 A 或 B
也有相同的情况。但这是不允许的。这很好,因为这种行为是模棱两可的。例如,如果您启用了惰性求值。 A 评估为 true,B 称为是或否。
关于delphi - 为什么 bool 表达式(有副作用)不足以作为语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22812620/