如何在过程参数(嵌套)中传递参数?

我有这个:

AVAudioSession.SharedInstance().SetPreferredSampleRate(16000,out NSError sampleHardwareErr2);

然后是一堆type TFuncGetData = function: Integer of object; function TFrmAPI.GetExactData(AFunc: TFuncGetData): Integer; var lStatus: Integer; begin FErrorMsg := ''; lStatus := AFunc; ... 这样的

TFuncGetData

被叫到

function TFrmAPI.getcurrentDivision: Integer;
begin
  ...

现在,所有这些lResult := GetExactData(getcurrentDivision); 都需要一个参数来传递信息:

TFuncGetData

但是函数type TFuncGetData = function(ASelProps: TSelectionProperties): Integer of object; function TFrmAPI.getcurrentDivision(ASelProps: TSelectionProperties): Integer; begin ... 现在通过GetExactDatalStatus :=aFunc调用中阻塞。

我看到两种解决方法:

  • 定义一个E2035 Not enough actual parameters,将其设置并让TFrmAPI.fselectionProperties使用它
  • 通过调用传递TSelectionProperties(例如here):

GetExactData

第二种方法更安全(因为可能会覆盖TFrmAPI.fselectionProperties),但是还有其他更好的方法来构造它吗?

bieuosu 回答:如何在过程参数(嵌套)中传递参数?

一旦调用开始递归,甚至在多个线程中使用该对象时,设置要传递给该函数的“全局”变量都会给您带来麻烦。

使用附加参数扩展方法仅具有以下优点:

  • 递归调用仍然可以使用不同的值
  • 您可以将其设置为可选,并提供默认值(Method( f: TFunc; p: TParam= 0 ): Integer;
  • 为确保将来的安全/不受限制,请定义您自己的类型(即可以在以后轻松扩展的记录,或直接分配给另一种类型的记录,例如type TParam= Cardinal;
  • 老式/危险的方法是只使用指针,它可以让您交出任何东西(我不建议这样做,很少需要您如此灵活的情况)
本文链接:https://www.f2er.com/3014716.html

大家都在问