跳转到内容

Ada 编程/属性/'Pos

来自维基教科书,自由的教科书

Ada. Time-tested, safe and secure.
Ada. 经得起时间考验,安全可靠。

'Pos 属性定义在所有离散类型上。它是一个函数,返回参数的索引号作为通用整数; 前缀 S 必须是子类型名称。(通用整数被隐式转换为任何特定整型,这取决于上下文。)

function S'Pos (Arg: S'Base) return universal_integer;

对于枚举类型,索引号从 0 开始; 如果参数不代表有效的值(可能是由于未初始化的变量),则会引发 Program_Error 异常。对于整型,属性返回转换为通用整数的值。请注意,实际参数不必属于子类型 S。

请注意,表示子句不会影响索引编号。无论枚举值的底层值是什么,索引号将保持不变。

I: Integer := -30;

pragma Assert (Integer'Pos(I) = -30);  -- of type universal_integer

type My_Enum is  (Enum1, Enum2, Enum3);
for  My_Enum use (Enum1 => 2, Enum2 => 4, Enum3 => 6);
...
pragma Assert (My_Enum'Pos(Enum1) = 2);  -- Wrong, 2 is the internal representation, not the position
pragma Assert (My_Enum'Pos(Enum1) = 0);  -- Right
pragma Assert (My_Enum'Pos(Enum3) = 2);

subtype My_Enum_Sub is My_Enum range Enum1 .. Enum2;

pragma Assert (My_Enum_Sub'Pos (Enum3) = 2);  -- Enum3 does not belong to My_Enum_Sub

另一个没有表示子句的示例

  type Color is  (Red, Blue, White);
  Object : Color := White;
begin 
  Put (Color'Pos (Object)); -- prints 2, position of White.
...

另请参阅

[编辑 | 编辑源代码]

'Pos 属性的逆运算符是 'Val

可以使用 Unchecked_Conversion 或使用实现定义的属性 'Enum_Rep(GNAT)获得底层表示。

有关通用整数的详细解释,请参阅 类型系统: 有符号整型的类型详细讨论。

维基教科书

[编辑 | 编辑源代码]

Ada 参考手册

[编辑 | 编辑源代码]
华夏公益教科书