微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用模糊参数类型重载Delphi方法会导致意外执行

我有两个Equal方法来承担这些重载:

tvariantExpression = reference to function(): Variant;

function Equal(const value: Variant): TRuleBuilder; overload;
function Equal(expr: tvariantExpression): TRuleBuilder; overload;

假设我有一个功能

function TForm1.GetMagicNumber: Variant;
begin
  Result := 10;
end;

调用这样的函数

Equal(Form1.GetMagicNumber);

检查后,我得到第二次重载调用的结果.为什么?因为它们都可以被调用.

解决方法

Form1.GetMagicNumber

很暧昧.它可以是函数,也可以是执行函数后返回的值.在大多数情况下,这些含义中只有一个是有效的,并且选择了这个含义.

在您的代码中,任一含义都是有效的.在这种情况下,语言规则意味着选择了程序类型解释.

强制函数调用写:

Form1.GetMagicNumber()

这与大多数其他语言有显着差异,例如: C,C,C#,Java,Python等.在这些语言中,您必须使用括号才能调用函数.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐