delphi中的高阶程序
我试图引用一个过程作为另一个过程的参数,但在理解文档时遇到困难。() 据我所知,我需要为程序创建一个新类型delphi中的高阶程序,delphi,pascal,Delphi,Pascal,我试图引用一个过程作为另一个过程的参数,但在理解文档时遇到困难。() 据我所知,我需要为程序创建一个新类型 type TCallback = procedure of object; 并将高阶过程声明为 程序高级顺序(pProc:TCallback) 尝试调用函数时(单击按钮时),我收到编译错误“E2010不兼容类型:'TCallBack'和'procedure,untyped pointer或untyped parameter'” 类型 TCallBack=对象的过程; TfrmMain
type
TCallback = procedure of object;
并将高阶过程声明为
程序高级顺序(pProc:TCallback)代码>
尝试调用函数时(单击按钮时),我收到编译错误“E2010不兼容类型:'TCallBack'和'procedure,untyped pointer或untyped parameter'”
类型
TCallBack=对象的过程;
TfrmMain=类(TForm)
btnAct:t按钮;
程序btnActClick(发送方:TObject);
私有的
程序高级顺序(pProc:TCallback);
过程回调();
{私有声明}
公众的
{公开声明}
结束;
变量
frmMain:TfrmMain;
实施
{$R*.dfm}
{TfrmMain}
程序TfrmMain.btnActClick(发送方:TObject);
开始
高阶(Callback()) 问题是,您首先调用Callback()
,然后试图将其返回值(它没有)传递给HigherOrder()
,但这不是HigherOrder()
所期望的,这就是为什么会出现错误的原因。换句话说,您的代码大致相当于:
过程TfrmMain.btnActClick(发送方:TObject);
开始
//高阶(Callback());
var res:=Callback();
高阶(res);
结束;
除了res
的类型未定义,因为Callback()
是一个过程
而不是函数
调用HigherOrder()
时,需要从Callback()
中删除后面的()
括号,以便将Callback
本身(以及它的内存地址)作为pProc
参数的值传递,例如:
过程TfrmMain.btnActClick(发送方:TObject);
开始
高阶(回调);
结束;
是的,您也可以在调用过程时删除括号,而无需向其传递任何参数。但是,在这种情况下,编译器足够聪明,知道省略回调标识符的括号被分配给闭包类型,因此将按原样传递它,而不是调用它
type
TCallBack = procedure of object;
TfrmMain = class(TForm)
btnAct: TButton;
procedure btnActClick(Sender: TObject);
private
procedure HigherOrder(pProc: TCallback);
procedure Callback();
{ Private declarations }
public
{ Public declarations }
end;
var
frmMain: TfrmMain;
implementation
{$R *.dfm}
{ TfrmMain }
procedure TfrmMain.btnActClick(Sender: TObject);
begin
HigherOrder(Callback()); <--Error occurs here
end;
procedure TfrmMain.Callback;
begin
//Do some stuff
end;
procedure TfrmMain.HigherOrder(pProc: TCallback);
begin
//Do some other stuff
pProc();
end;
end.