Delphi 7 中动态数组作为可选参数

ale*_*oot 1 arrays delphi delphi-7 dynamic-arrays

是否可以将动态数组作为可选参数传递给函数或过程?如果是,怎么办?

我已经尝试过这种方式:

procedure testp (str : string; var arr : StringArray = nil);
begin
    str := 'Ciao Alessio !';
    SetLength(arr, 2);
    arr[0] := 'Ale';
    arr[1] := 'Ale';
end;
Run Code Online (Sandbox Code Playgroud)

但它给出了:default parameter 'arr' must be by-value or const

我正在使用 Delphi 7,但如果 Delphi 7 无法使用,那么更新版本的 Delphi 或 Free Pascal 是否可以?

Dav*_*nan 5

只能为 const 或按值参数指定默认参数。不能为 var 参数指定它们。

为了实现您正在寻找的调用者灵活性,您需要使用重载。

procedure foo(var arr: StringArray); overload;
begin
  .... do stuff
end;

procedure foo; overload;
var
  arr: StringArray;
begin
  foo(arr);
end;
Run Code Online (Sandbox Code Playgroud)