Ada 编程/属性/'Pos
外观
'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_integertype
My_Enumis
(Enum1, Enum2, Enum3);for
My_Enumuse
(Enum1 => 2, Enum2 => 4, Enum3 => 6); ...pragma
Assert (My_Enum'Pos(Enum1) = 2); -- Wrong, 2 is the internal representation, not the positionpragma
Assert (My_Enum'Pos(Enum1) = 0); -- Rightpragma
Assert (My_Enum'Pos(Enum3) = 2);subtype
My_Enum_Subis
My_Enumrange
Enum1 .. Enum2;pragma
Assert (My_Enum_Sub'Pos (Enum3) = 2); -- Enum3 does not belong to My_Enum_Sub
另一个没有表示子句的示例
type
Coloris
(Red, Blue, White); Object : Color := White;begin
Put (Color'Pos (Object)); -- prints 2, position of White. ...
'Pos 属性的逆运算符是 'Val。
可以使用 Unchecked_Conversion 或使用实现定义的属性 'Enum_Rep(GNAT)获得底层表示。
有关通用整数的详细解释,请参阅 类型系统: 有符号整型的类型详细讨论。