Jen*_*off 12 delphi expression language-design delphi-xe2
function A: Boolean;
function B: Boolean;
Run Code Online (Sandbox Code Playgroud)
我(意外地)写道:
A or B;
Run Code Online (Sandbox Code Playgroud)
而不是:
if not A then
B;
Run Code Online (Sandbox Code Playgroud)
编译器拒绝第一个表单,我很好奇为什么?
通过短路评估他们会做同样的事情,不是吗?
澄清:我想知道为什么这种语言的设计不允许我的表达作为陈述.
第一个是表达式.表达式被评估.表达式没有明显的副作用(如读取或写入变量).表达式的两个操作数都是函数,它们可能有副作用,但为了产生副作用,必须执行一个语句.
第二个是声明.它比较表达式的结果并基于评估调用另一个函数.
令人困惑的部分是,在这种情况下,Delphi允许我们忽略函数的结果并将其作为函数执行.所以你期望同样的A or B.但这是不允许的.这很好,因为行为含糊不清.例如,如果您启用了延迟评估.并且A评估为真,B称为是或否.
| 归档时间: |
|
| 查看次数: |
631 次 |
| 最近记录: |