Delphi TProc<Integer> - 参数值可以改变吗

Delphi TProc<Integer> - can parameter value be changed

能否使 TProc<T> 不仅允许读取值,而且允许在 TProc 匿名过程中编辑值?

var xProc2: TProc<Integer>;
xProc2 := procedure(aValue: Integer)
  begin
    aValue := 5;
  end;

Delphi10.4.x

如果代码恰好需要 TProc<Integer>;,则不需要。您可以更改值类型参数的本地副本并在过程中使用它,但外部代码看不到更改。

如果可能,您可以使用PInteger类型的指针参数,并更改aValue^

您还可以使用 var 参数定义自己的泛型类型

type
   TProcvar<T> = reference to procedure (var Arg1: T);

并应用它

var xProc2: TProcVar<Integer>;
xProc2 := procedure(var aValue: Integer)
  begin
    aValue := 5;
  end;

但我认为最可靠的方法 - 使用 function TFunc<T,TResult>(如果不使用输入参数,则使用 TFunc<TResult>

var xFunc: TFunc<Integer, Integer>;
xfunc := function(aValue: Integer): Integer
  begin
    Result := aValue + 5;
  end;