如何在Ada中定义仅允许十六进制字符的String子类型?
定义仅包含十六进制字符的Ada字符串子类型
你已经正确定义了十六进制字符的子类型Hex_Character,接下来可以通过**静态谓词(Static_Predicate)**约束String的每个元素都属于Hex_Character,从而实现Hex_String子类型:
subtype Hex_Character is Character with Static_Predicate => Hex_Character in 'A' .. 'F' | 'a' .. 'f' | '0' .. '9'; subtype Hex_String is String with Static_Predicate => (for all C of Hex_String => C in Hex_Character);
说明:
- 这里使用了Ada的量化表达式
for all C of Hex_String,遍历字符串中的每个字符,确保每一个字符都符合Hex_Character的约束。 - 静态谓词会在编译期和运行期(若启用运行时检查)验证字符串合法性,比如尝试给
Hex_String赋值包含非十六进制字符的字符串时,会触发约束检查错误。
示例验证:
declare Valid_Hex : Hex_String := "1A3f"; -- 合法,符合要求 -- Invalid_Hex : Hex_String := "1G3f"; -- 编译错误,'G'不是十六进制字符 begin null; end;
内容的提问来源于stack exchange,提问作者user1091344
相关产品推荐
相关产品推荐

