Описание типа String в Ada

У меня есть тип, похожий на:

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

Как я могу указать этот формат в коде, либо с Ada или SPARK?

Я думал о Static_Predicate, но условие, что строка должна начинаться с 3 положительных целых чисел, за которыми следует тире, за которым следует другой набор из 3 положительных целых чисел, не может быть описано с помощью Static_Predicate выражение.

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 вместо актуальных новых типов.

Другие вопросы по тегам