我需要将函数作为参数传递,如下所示:
procedure SomeProc(AParameter: TFunc<Integer, Integer>);
Run Code Online (Sandbox Code Playgroud)
当我有这个功能时......
function DoSomething(AInput: Integer): Integer;
...
SomeProc(DoSomething);
...
Run Code Online (Sandbox Code Playgroud)
......代码有效.但是使用参数修饰符,如const,var或默认值,如...
function DoSomething(const AInput: Integer = 0): Integer;
Run Code Online (Sandbox Code Playgroud)
...编译器返回不匹配参数列表的错误.
有没有办法传递参数修改器,或避免这个错误?
非常感谢你的建议.
您可以将其包装在匿名方法中,如下所示:
SomeProc(function(Arg: Integer): Integer begin Result := DoSomething(Arg) end);
Run Code Online (Sandbox Code Playgroud)
仅当您将其声明为方法引用时:
type TDoSomething = reference to function(const AInput: Integer = 0): Integer;
function SomeProc(AParameter: TDoSomething): Integer;
begin
Result := AParameter;
end;
function CallSomeProc: integer;
begin
Result := SomeProc(function(const AInput: Integer = 0): Integer begin Result := AInput end);
end;
Run Code Online (Sandbox Code Playgroud)