delphi - 为什么 bool 表达式(有副作用)不足以作为语句?

标签 delphi expression delphi-xe2 language-design

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/

相关文章:

java - python 和 Java 中 while 循环中的表达式与赋值?

c# - 使用正则表达式删除字符前后的空格

java - JVM 的最佳沙盒表达式语言

delphi - 编译器是否优化(关闭)相同的 FieldByName 调用?

delphi - 我可以将 map2dbg 与 64 位 Delphi 可执行文件一起使用吗?

delphi - 变量应该在调用函数之前初始化吗?

delphi - 输入框中的取消按钮未关闭

delphi - 带有 UseExplorerThemes 的 VirtualTreeView

delphi - 在构建配置中设置调试器语言异常(忽略)

delphi - 将 Canvas 另存为图像