跳转到内容

Ada 编程/属性/'Val

来自维基教科书,开放的书籍,开放的世界

Ada. Time-tested, safe and secure.
Ada. 经久耐用,安全可靠。

'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_Enum is (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_Enum is (Value1, Value2, Value3);
for My_Other_Enum use (Value1 => 2, Value2 => 4, Value3 => 6);

pragma Assert (My_Enum'Val(0) = Enum1);  -- OK
pragma Assert (My_Enum'Val(1) = Enum2);  -- OK
pragma Assert (My_Enum'Val(2) = Enum3);  -- OK

pragma Assert (My_Other_Enum'Val(0) = Value1);  -- OK
pragma Assert (My_Other_Enum'Val(1) = Value2);  -- OK
pragma Assert (My_Other_Enum'Val(2) = Value3);  -- OK

pragma Assert (My_Enum'Val(3)       = Enum3);  -- Wrong
pragma Assert (My_Other_Enum'Val(2) = Value1); -- Wrong
pragma Assert (My_Other_Enum'Val(4) = Value2); -- Wrong
pragma Assert (My_Other_Enum'Val(6) = Value3); -- Wrong

其他示例

type Color is (RED, BLUE, WHITE);
   OBJECT : Color := WHITE;
begin
   Put (Color'Val (1));      -- give BLUE

内部表示只能通过 Unchecked_Conversion 查询。

另请参阅

[编辑 | 编辑源代码]

'Val 属性的逆是 'Pos。

维基教科书

[编辑 | 编辑源代码]

Ada 参考手册

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