函数作为另一个函数的参数_在另一个函数中使用一个函数或过程作为参数

函数作为另一个函数的参数

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) :

以下是如何将函数(或过程)作为另一个函数(或过程)的参数调用:

  1. Declare the function (or procedure) that will be used as a parameter. In the example below, this is "TFunctionParameter".

    声明将用作参数的函数(或过程)。 在下面的示例中,这是“ TFunctionParameter”。
  2. 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

函数作为另一个函数的参数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值