使用所有默认值初始化记录类型的常量变量
Initialize constant variable of record type with all default values
假设我有一个类型
type Record_T is
record
VAR1 : integer := 1;
VAR2 : string := "";
end record;
如果我想初始化一个这种类型的常量变量,我可以通过以下几种方式实现:
Null_Record : constant Record_T := (1, "");
Null_Record : constant Record_T := Record_T'(1, "");
但这迫使我指定默认值,而我之前已经指定了默认值。
我已经尝试了以下所有方法,但都无济于事
Null_Record : constant Record_T := ();
Null_Record : constant Record_T := Record_T'();
Null_Record : constant Record_T;
但必须有某种方法才能做到这一点?至少,如果 Ada 没有这种能力,我会感到非常惊讶。
看起来这在 Ada 2005 中应该是可能的,使用新的 "default value initialization" 用于使用 <>
运算符的聚合。
这看起来像
Null_Record : constant Record_T := (others => <>);
我看不出有什么方法可以在 Ada 2005 之前完成此操作。不幸的是,这对我来说不是解决方案,因为我一直在使用 Ada 95。
典型的方法,pre-ISO/IEC 8652:2007,假设你的类型在包中,是在可见部分声明一个延迟常量:
Null_Record : constant Record_T;
然后在私人部分完成:
Null_Var : Record_T;
Null_Record : constant Record_T := Null_Var;
假设我有一个类型
type Record_T is
record
VAR1 : integer := 1;
VAR2 : string := "";
end record;
如果我想初始化一个这种类型的常量变量,我可以通过以下几种方式实现:
Null_Record : constant Record_T := (1, "");
Null_Record : constant Record_T := Record_T'(1, "");
但这迫使我指定默认值,而我之前已经指定了默认值。
我已经尝试了以下所有方法,但都无济于事
Null_Record : constant Record_T := ();
Null_Record : constant Record_T := Record_T'();
Null_Record : constant Record_T;
但必须有某种方法才能做到这一点?至少,如果 Ada 没有这种能力,我会感到非常惊讶。
看起来这在 Ada 2005 中应该是可能的,使用新的 "default value initialization" 用于使用 <>
运算符的聚合。
这看起来像
Null_Record : constant Record_T := (others => <>);
我看不出有什么方法可以在 Ada 2005 之前完成此操作。不幸的是,这对我来说不是解决方案,因为我一直在使用 Ada 95。
典型的方法,pre-ISO/IEC 8652:2007,假设你的类型在包中,是在可见部分声明一个延迟常量:
Null_Record : constant Record_T;
然后在私人部分完成:
Null_Var : Record_T;
Null_Record : constant Record_T := Null_Var;