使用模糊参数类型重载Delphi方法会导致意外执行
发布时间:2020-12-15 09:33:43 所属栏目:大数据 来源:网络整理
导读:我有两个Equal方法来承担这些重载: TVariantExpression = reference to function(): Variant;function Equal(const value: Variant): TRuleBuilder; overload;function Equal(expr: TVariantExpression): TRuleBuilder; overload; 假设我有另一个功能: fun
我有两个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等.在这些语言中,您必须使用括号才能调用函数. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |