You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 07:22:01