当集合仅包含一个元素,如下,编译错误位置符号的结果,我们必须只使用命名表示法。 为什么?
type singleton is record
v : integer;
end record;
v1 : singleton := (0);
结果在编译消息
check.adb:6:23: positional aggregate cannot have one component
check.adb:6:23: write instead "V => ..."
gnatmake: “check.adb" compilation error
而这是确定:
v2 : singleton := (v => 0);
括号圆形的表达是冗余的,所以(0)= 0,它是一个整数阵列聚集体。
因此,对于一元集合的特殊情况下,命名关联需要的聚集体从一个简单的值区别开来。
与(0,0),其只能是一个聚合对比这; 因此,没有歧义。
尽管在这个问题的背景下,这是显而易见的并且打算在人类的程序员,这不会永远是这样。
考虑在多维阵列,其是一个记录的一个字段一个一元集合; 可以有编译器不能解决歧义(至少,读了一大堆更多的源文件之前!),并会使任何人读取程序生命相当困难。
您不必使用命名符号。
v1 : singleton := (others => 0);
这将在V1分配0到所有元素和编译器将知道是不是一个号码,但阵列来代替。
如果记录碰巧有不同的类型,你可以使用
v1 : singleton := (others => <>);