函数作为另一个函数的参数
In Delphi, procedural types (method pointers) allow you to treat procedures and functions as values that can be assigned to variables or passed to other procedures and functions.
在Delphi中 , 过程类型 (方法指针)使您可以将过程和函数视为可以分配给变量或传递给其他过程和函数的值。
Here's how to call a function (or procedure) as a parameter of another function (or procedure) :
以下是如何将函数(或过程)作为另一个函数(或过程)的参数调用:
- Declare the function (or procedure) that will be used as a parameter. In the example below, this is "TFunctionParameter". 声明将用作参数的函数(或过程)。 在下面的示例中,这是“ TFunctionParameter”。
- Define a function that will accept another function as a parameter. In the example below this is "DynamicFunction" 定义一个将接受另一个函数作为参数的函数。 在下面的示例中,这是“ DynamicFunction”
type
TFunctionParameter = function(const value : integer) : string;
...
...
function One(const value : integer) : string;begin
result := IntToStr(value) ;
end;
function Two(const value : integer) : string;begin
result := IntToStr(2 * value) ;
end;
function DynamicFunction(f : TFunctionParameter) : string;begin
result := f(2006) ;
end;
...
...
//Example usage:
var
s : string;
begin
s := DynamicFunction(One) ;
ShowMessage(s) ; //will display "2006"
s := DynamicFunction(Two) ;
ShowMessage(s) ; // will display "4012"end;
重要笔记 ( Important Notes )
- Of course, you decide on the signature of the "TFunctionParameter": whether it is a procedure or a function, how many parameters does it take, etc. 当然,您可以确定“ TFunctionParameter”的签名:它是过程还是函数,需要多少个参数,等等。
If "TFunctionParameter" is a method (of an instance object) you need to add the words of object to the procedural type name, as in:TFunctionParameter = function(const value : integer) : string of object;
如果“ TFunctionParameter”是(实例对象的)方法,则需要将对象的单词添加到过程类型名称中,例如:TFunctionParameter = function(const value:integer):object的字符串;
If you expect "nil" to be specified as the "f" parameter, you should test for this using the Assigned function.
如果希望将“ nil”指定为“ f”参数,则应使用Assigned函数对此进行测试。
- Fixing the "Incompatible type: 'method pointer and regular procedure'" 修复了“不兼容类型:'方法指针和常规过程'”
翻译自: https://www.thoughtco.com/function-or-procedure-as-parameter-1057606
函数作为另一个函数的参数