Ada:如何枚举由整数和其他类型组成的类型?

时间:2016-08-23 14:49:25

标签: types ada

例如,我想创建一个代表所有牌组的类型(即2-10,Jack,Queen,King和Ace)。

我想过这样做:

    type Rank is (2,3,4,5,6,7,8,9,10,Jack,Queen,King,Ace);

但是我收到了这个错误:

    identifier expected

2 个答案:

答案 0 :(得分:5)

你不能。

枚举类型声明中的列表由标识符和/或字符文字组成。在这种情况下,你不能拥有整数文字。

您可以使用陈述条款指定用于表示枚举数的值,但我不认为这是您想要的。

只需使用标识符:

type Rank is (R2,R3,R4,R5,R6,R7,R8,R9,R10,Jack,Queen,King,Ace);

答案 1 :(得分:2)

您可以声明两个辅助类型和一个组合:

package Mixed_Enumeration_And_Integer is
   type Integer_Values is range 1 .. 10;
   type Enumeration_Values is (Jack, Queen, King, Ace);

   type Object is private;

   function "+" (Item : Integer_Values) return Object;
   function "+" (Item : Enumeration_Values) return Object;

   function "+" (Item : Object) return Integer_Values;
   function "+" (Item : Object) return Enumeration_Values;

   function "=" (Left  : Integer_Values;
                 Right : Object) return Boolean;
   function "=" (Left  : Enumeration_Values;
                 Right : Object) return Boolean;

private
   type States is (Uninitialized, Integer, Enumeration);

   type Object (State : States := Uninitialized) is
      record
         case State is
            when Uninitialized => null;
            when Integer       => I : Integer_Values;
            when Enumeration   => E : Enumeration_Values;
         end case;
      end record;
end Mixed_Enumeration_And_Integer;