一个函数正在返回一个匿名函数。我想将结果分配给一个变量。但是,编译器认为我正在尝试分配函数,而不是函数的结果。我该如何解决?
program Project9;
{$APPTYPE CONSOLE}
type
TMyEvent = reference to function: string;
var
v1: TMyEvent;
function GetHandler: TMyEvent;
begin
Result := function: string
begin
Result := '';
end;
end;
begin
v1 := GetHandler; // <- Incompatible types: 'TMyEvent' and 'Procedure'
end.
注意:我确实有一种解决方法,但我希望可以在不引入包装器的情况下解决此问题:
program Project9;
{$APPTYPE CONSOLE}
type
TMyEvent = reference to function: string;
TWrapper = record
FHandler: TMyEvent;
end;
var
v1: TMyEvent;
function GetHandler: TWrapper;
begin
Result.FHandler := function: string
begin
Result := '';
end;
end;
begin
v1 := GetHandler.FHandler; // <- works
编辑:这不是特定于匿名函数或任何特殊类型的函数:对于返回函数的任何函数都是实际的,甚至在第一个Delphi到达之前,它在Turbo Pascal中都是相同的。
如果您的匿名方法/函数是无参数的,则必须使用()进行赋值;
v1 := GetHandler();
如果没有括号,Delphi将尝试将函数分配给变量。括号告诉它调用函数并将函数结果分配给变量。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句