Ada 编程/属性/'Valid
外观
Valid 属性 可以与任何标量类型(即数字或枚举类型)的对象一起使用,以确定其值是否有效(例如,不在范围之外等)。结果始终为 True 或 False;不会引发 Constraint_Error 或任何其他 异常。
重要的是,属性的计算不计入读取对象,而读取无效对象会使程序出现错误。
-- Declare a discrete type and explicitly set the position numberstype
My_Enumis
(Value1, Value2, Value3);for
My_Enumuse
(Value1 => 2, Value2 => 4, Value3 => 6 ); Result : Natural; Enum_Var, Other_Var: My_Enum; Sneaky_Back_Door : Integer;for
Enum_Var'Addressuse
Sneaky_Back_Door'Address; ...if
not
Result'Validthen
-- Result is out-of-range, it has a negative value Result := Natural'First;end
if
; ... -- Assign a bad integer value to the enumerated type variable. Sneaky_Back_Door := 1; Other_Var := Enum_Var; -- reading Enum_Var makes the program erroneous ...if
not
Enum_Var'Validthen
-- this is not reading -- Enum_Var contains a bad value Enum_Var := My_Enum'First;end
if
;
请注意,在上面的错误赋值语句中,由于两个变量都是相同子类型的,因此没有执行范围检查(因此不会引发异常)。
- 5.9.1 未经检查的转换 — 考虑使用 'Valid 属性来检查标量数据的有效性。
- 5.9.7 Direct_IO 和 Sequential_IO — 使用 'Valid 属性来检查通过 Ada.Direct_IO 和 Ada.Sequential_IO 获得的标量值的有效性。
- 6.3.3 Abort 语句 — 在存在 Abort 语句的情况下,考虑使用 'Valid 属性来检查标量数据的有效性。