我想定义一个匿名方法数组: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'
将数组用于integer
或string
之类的本机数据类型适用于类似的构造。
答案 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)];