加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

在Delphi中如何传递函数作为参数?

发布时间:2020-12-15 04:31:03 所属栏目:大数据 来源:网络整理
导读:可以在过程中传递一个对象函数作为参数,而不是传递整个对象吗? 我有一个记录定义,函数定义为一个公共类参数,如: TMyRecord = record public class function New(const a,b: Integer): TMyRecord; static; function GiveMeAValue(inputValue: integer): Sin
可以在过程中传递一个对象函数作为参数,而不是传递整个对象吗?

我有一个记录定义,函数定义为一个公共类参数,如:

TMyRecord = record
      public
        class function New(const a,b: Integer): TMyRecord; static;
        function GiveMeAValue(inputValue: integer): Single;
      public
        a,b: Integer;
      end;

该功能可以是:

function TMyRecord.GiveMeAValue(inputValue: Integer): Single;
    begin
      RESULT := inputValue/(self.a + self.b);
    end;

然后我希望定义一个调用类函数GiveMeAValue的过程,但是我不想将整个记录传递给它.我可以这样做,例如:

Procedure DoSomething(var1: Single; var2,var3: Integer,?TMyRecord.GiveMeAValue?);
    begin
      var1 = ?TMyRecord.GiveMeAValue?(var2 + var3);
      //Do Some Other Stuff
    end;

如果是这样,那么如何正确地传递函数作为过程参数?

解决方法

您可以为函数定义新的类型
TGiveMeAValue= function(inputValue: integer): Single of object;// this definition works fine for methods for records.

然后定义DoSomething方法

Procedure DoSomething(var1: Single; var2,var3: Integer;GiveMeAValue: TGiveMeAValue);
begin
  writeln(GiveMeAValue(var2 + var3));
end;

并使用如此

var
  L : TMyRecord;
begin
    l.a:=4;
    l.b:=1;
    DoSomething(1,20,5,L.GiveMeAValue);
end;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读