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;
能否使 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;