我想构建一个 Package 器函数来从JSON中提取数据并将其传递给方法。这样的事情
procedure THandler.MethodA(A,B:String)
begin
...
end;
procedure THandler.MethodB(A:String;B:Integer)
begin
...
end;
procedure THandler.MethodC(A,B,C:Integer)
begin
...
end;
procedure THandler.HandleCall(Data:tJSONObject;Handler:TUndefinedProc;Params:TArray<string>)
begin
//read fields contained in "Params" from Data and pass them as variables to "Handler"
end
procedure THandler.CallA(Data:TJSONObject);
begin
HandleCall(Data,MethodA,['param1','param2']);
end;
我现在看到两个挑战:如何将方法传递给HandleCall
以及如何处理HandleCall
内部未定义的参数数量。
这可能吗?
1条答案
按热度按时间pes8fvy91#
是的。你可以将类型声明为函数或过程模板(事件处理程序就是这样定义的)。您还可以指定一个参数数组,以允许传递可变数量的参数(相同类型)。当然,你也可以用不同的参数声明不同的类型。
您不需要使用
Rtti
来实现这一点,但作为一个题外话,Rtti
单元将其与Rtti
类型TValue
(可以容纳多种数据类型)一起使用,以提供 Package 器,允许使用Rtti来发现和调用您声明的任何内容。您是否尝试过:
然后,如果你有一个包含这样一个函数的对象,你想调用:
以及接受此类回调的处理程序:
你可以通过像这样传递回调的地址来安装它:
处理程序可以像这样调用它: