我有两个等于这些重载的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等。在这些语言中,必须使用括号才能调用函数。

关于delphi - 参数类型不明确的Delphi方法的重载会导致意外执行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14067556/

10-13 02:43