我需要像这样传递一个函数作为参数:
procedure SomeProc(AParameter: TFunc<Integer, Integer>);
当我有这个功能时...
function DoSomething(AInput: Integer): Integer;
...
SomeProc(DoSomething);
...
...Delphi 编程代码可以工作。但可以通过参数修改(如
const
、var
)或默认值(如...)
function DoSomething(const AInput: Integer = 0): Integer;
...编译器返回参数列表不匹配的错误。
有什么方法可以传递参数修饰符,或者避免这个错误吗?
非常感谢您的建议。
您可以将其包装在匿名方法中,如下所示:
SomeProc(function(Arg: Integer): Integer begin Result := DoSomething(Arg) end);
仅当您将其声明为方法引用时:
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;
有什么方法可以传递参数修饰符,或者避免这个错误吗?
不。您提供给
SomeProc
的函数必须具有与 TFunc<Integer, Integer>
匹配的签名。