加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

delphi – 作为函数的结果的“函数引用”

发布时间:2020-12-15 09:51:48 所属栏目:大数据 来源:网络整理
导读:我有一个函数返回一个函数TFunc Integer这是对函数的引用:整数. 我有一个程序,它采用函数TFunc Integer作为参数,调用它并打印其结果. program Project1;{$APPTYPE CONSOLE}{$R *.res}uses System.SysUtils;function GetFunction:TFuncInteger;begin result
我有一个函数返回一个函数TFunc< 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'

所以,如果你有某种方式(可能有一些编译器选项),设法使代码编译然后我只能相信这是由于一个错误.

您应该通过应用括号来处理此问题,以便编译器可以理解您希望调用GetFunction,而不是引用它.

FunctionCall(GetFunction());

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读