【问题标题】:Describing a String type in Ada在 Ada 中描述一个字符串类型
【发布时间】:2017-11-05 15:04:28
【问题描述】:

我的类型类似于:

type ID is new String (1 .. 7);
-- Example: 123-456

如何使用 Ada 或 SPARK 在代码中指定该格式?

我在考虑Static_Predicate,但是字符串必须以 3 个正整数开头,后跟一个破折号,后跟另一组 3 个正整数的条件不能用 Static_Predicate 表达式来描述。

【问题讨论】:

    标签: ada ada2012 spark-2014


    【解决方案1】:

    您必须为此使用Dynamic_Predicate

    type ID is new String (1 .. 7)
      with Dynamic_Predicate => (for all I in ID'Range =>
                                   (case I is
                                       when 1 .. 3 | 5 .. 7 => ID (I) in '0' .. '9',
                                       when 4               => ID (I) in '-'));
    

    我自己也经常使用它,但我主要将类型设置为String 的子类型,而不是实际的新类型。

    【讨论】:

    • 当我尝试这样做时,我得到了错误:“of”应该是“is”。
    • 认为 GNAT 让你只使用Predicate(它决定是使用Dynamic_Predicate 还是Static_Predicate 自己)
    • 搞砸了。现已更正。
    • @SimonWright,但这是 GNAT 特有的行为,不太可能进入标准,因为它不清楚子类型是否可用于 case 语句。
    • 太好了,谢谢。有用。我创建了一个单独的验证函数并将其用作Dynamic_Predicate
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-03
    • 1970-01-01
    • 1970-01-01
    • 2011-07-24
    • 1970-01-01
    相关资源
    最近更新 更多