如何定义匿名方法的数组

时间:2018-12-15 10:03:40

标签: delphi

我想定义一个匿名方法数组:TFunc<Integer>

function MyFunc: Integer;
begin

end;

procedure TForm84.Button1Click(Sender: TObject);
var A: TArray<TFunc<Integer>>;
begin
  A := [MyFunc];
end;

但是Delphi编译器提示错误:

[dcc32 Error] E2010 Incompatible types: 'System.SysUtils.TFunc<System.Integer>' and 'Integer'

将数组用于integerstring之类的本机数据类型适用于类似的构造。

2 个答案:

答案 0 :(得分:3)

编译器无法确定您对MyFunc的使用是否意味着调用该函数或将其引用为函数。

因此您可能需要帮助编译器:

SetLength(A, 1);
A[0] := MyFunc;

答案 1 :(得分:0)

MyFunc()不使用任何输入参数,因此Delphi允许选择不带括号地调用它,例如:

var
  I: Integer;

I := MyFunc();
I := MyFunc; // <-- same as above!

在类似A := [MyFunc];的语句中,编译器显然不够聪明,无法弄清楚使用MyFunc的上下文需要{{1}的 address }传递给数组,因此它调用 MyFunc()并将返回值传递给数组,因此会出现错误消息。

因此,您需要向编译器更明确地表明需要该地址。

尝试一下:

MyFunc()

或者:

A := [@MyFunc];

或者:

A := [Addr(MyFunc)];