gpt4 book ai didi

delphi - 使用不明确的参数类型重载 Delphi 方法会导致意外执行

转载 作者:行者123 更新时间:2023-12-03 15:08:32 29 4
gpt4 key购买 nike

我有两个采用这些重载的 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/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com