我有两个Equal方法来承担这些重载:
TVariantExpression = reference to function(): Variant;
function Equal(const value: Variant): TRuleBuilder; overload;
function Equal(expr: TVariantExpression): TRuleBuilder; overload;
Run Code Online (Sandbox Code Playgroud)
假设我有另一个功能:
function TForm1.GetMagicNumber: Variant;
begin
Result := 10;
end;
Run Code Online (Sandbox Code Playgroud)
我调用这样的函数:
Equal(Form1.GetMagicNumber);
Run Code Online (Sandbox Code Playgroud)
检查后,我得到第二次重载调用的结果.为什么?因为它们都可以被调用.
Form1.GetMagicNumber
Run Code Online (Sandbox Code Playgroud)
很暧昧.它可以是函数,也可以是执行函数后返回的值.在大多数情况下,这些含义中只有一个是有效的,并且选择了这个含义.
在您的代码中,任一含义都是有效的.在这种情况下,语言规则意味着选择了程序类型解释.
强制函数调用写:
Form1.GetMagicNumber()
Run Code Online (Sandbox Code Playgroud)
这与大多数其他语言有很大不同,例如C,C++,C#,Java,Python等.在这些语言中,您必须使用括号来调用函数.
| 归档时间: |
|
| 查看次数: |
298 次 |
| 最近记录: |