Ada 编程/属性/'Val
外观
'Val 属性为所有离散类型定义。它是一个函数,返回 S 基类型的那个值,该值具有参数的位置编号;前缀 S 必须是子类型名称。(任何特定整数类型都隐式转换为universal_integer。)
function
S'Val (Arg: universal_integer)return
S'Base;
如果 S 类型中没有值具有 Arg 的位置编号,则会引发 Constraint_Error 异常。
请注意,表示子句不会影响位置编号。枚举值具有什么底层值,位置编号将保持不变。
-- Declare a discrete type; the compiler will assign the internal representation as 0 .. 2 -- identical to the position numbers.type
My_Enumis
(Enum1, Enum2, Enum3); -- Declare a discrete type and explicitly set the internal representation. -- Note that the position numbers are still 0 .. 2.type
My_Other_Enumis
(Value1, Value2, Value3);for
My_Other_Enumuse
(Value1 => 2, Value2 => 4, Value3 => 6);pragma
Assert (My_Enum'Val(0) = Enum1); -- OKpragma
Assert (My_Enum'Val(1) = Enum2); -- OKpragma
Assert (My_Enum'Val(2) = Enum3); -- OKpragma
Assert (My_Other_Enum'Val(0) = Value1); -- OKpragma
Assert (My_Other_Enum'Val(1) = Value2); -- OKpragma
Assert (My_Other_Enum'Val(2) = Value3); -- OKpragma
Assert (My_Enum'Val(3) = Enum3); -- Wrongpragma
Assert (My_Other_Enum'Val(2) = Value1); -- Wrongpragma
Assert (My_Other_Enum'Val(4) = Value2); -- Wrongpragma
Assert (My_Other_Enum'Val(6) = Value3); -- Wrong
其他示例
type
Coloris
(RED, BLUE, WHITE); OBJECT : Color := WHITE;begin
Put (Color'Val (1)); -- give BLUE
内部表示只能通过 Unchecked_Conversion 查询。
'Val 属性的逆是 'Pos。
- 13.3 操作和表示属性 (注释)
- 附录 K 语言定义的属性 (注释)