gpt4 book ai didi

delphi - "reference to function"作为函数的结果

转载 作者:行者123 更新时间:2023-12-03 15:01:16 26 4
gpt4 key购买 nike

我有一个返回函数 TFunc<Integer> 的函数这是 reference to function:Integer 。我有一个需要函数 TFunc<Integer> 的程序作为参数,调用它并打印其结果。

program Project1;

{$APPTYPE CONSOLE}

{$R *.res}

uses
System.SysUtils;

function GetFunction:TFunc<Integer>;
begin
result := function:Integer begin result := 42 end;
end;

procedure FunctionCall(AFunc:TFunc<Integer>);
var i:Integer;
begin
i := AFunc;
WriteLn(Format('Function Result = %d',[i]));
end;

begin
// FunctionCall(GetFunction); // error
FunctionCall(GetFunction()); // works as excpected
end.

此调用 ( FunctionCall(GetFunction); ) 会导致错误。以及 () 的通话按预期工作。

我的问题是:
在delphi中什么时候我需要brakets来调用函数,什么时候不需要(我认为我永远不需要它们)

我不需要它们吗?这是一个错误吗?

我在 Windows 7 dcc32 上使用 delphi xe5。

最佳答案

如果您报告的内容是正确的(请参阅下文了解更多信息),那么我相信您会发现一个错误。

这段代码:

FunctionCall(GetFunction);

不应编译。事实上,当我尝试在 XE3、XE4、XE5、XE6 和 XE7 中编译它时,它无法编译。它无法编译,因为在这个特定的上下文中,编译器将 GetFunction 解释为类型

function: TFunc<Integer>

所有上述编译器都反对此错误消息:

[dcc32 Error] E2010 Incompatible types: 'System.SysUtils.TFunc' and 'Procedure'

So, if you have somehow (perhaps with some compiler options), managed to make that code compile then I can only believe that is due to a bug.

You should deal with this by applying the parentheses so that the compiler can understand that you wish to call GetFunction, not refer to it.

FunctionCall(GetFunction());

关于delphi - "reference to function"作为函数的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25746530/

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