You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

最新版Delphi中是否支持为数组类型参数设置默认值?

Delphi数组类型参数默认值相关问题解答

你给出的写法不符合Delphi语法规范,无法正常通过编译。

原因说明

  • Delphi从XE7版本开始确实支持[1,2,3]这类动态数组字面量构造语法,但这类语法生成的是运行时才会实例化的动态数组对象,不属于编译期可确定的常量表达式。
  • Delphi语法要求参数的默认值必须是编译期常量,而动态数组属于引用类型,无法在编译阶段生成固定的常量实例作为默认值,因此直接给TArray<Integer>类型参数设置数组字面量默认值的写法不被支持。

推荐替代实现方案

  • 方案1:方法重载(无歧义,优先推荐)
// 声明部分
procedure myProcedure(const AnArray: TArray<Integer>); overload;
procedure myProcedure; overload;

// 实现部分
procedure myProcedure(const AnArray: TArray<Integer>);
begin
  // 你的原有逻辑
end;

procedure myProcedure;
begin
  myProcedure([1,2,3]);
end;

该方案不需要额外判断逻辑,也不会和用户主动传入空数组的场景产生冲突。

  • 方案2:默认值设为nil,方法内部初始化
// 声明部分
procedure myProcedure(const AnArray: TArray<Integer> = nil);

// 实现部分
procedure myProcedure(const AnArray: TArray<Integer>);
var
  LUseArray: TArray<Integer>;
begin
  LUseArray := AnArray;
  if LUseArray = nil then
    LUseArray := [1,2,3];
  // 后续使用LUseArray处理逻辑
end;

该方案实现更简洁,但注意Delphi中空动态数组的变量值等于nil,如果你允许用户传入空数组作为有效参数,该方案会出现误判,这类场景不要使用。

内容的提问来源于stack exchange,提问作者zeus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 04:45:03