2016-08-23 14 views
2

たとえば、カードのランク(つまり、2-10、Jack、Queen、King、Ace)のすべてを表すタイプを作成したいとします。Ada:整数型と他の型からなる型を列挙するには?

私はこれをやって考える:

type Rank is (2,3,4,5,6,7,8,9,10,Jack,Queen,King,Ace); 
しかし、私はこのエラーを取得する:

identifier expected 

答えて

4

あなたがすることはできません。

列挙型宣言のリストは、識別子および/または文字リテラルから成ります。その文脈で整数リテラルを持つことはできません。

表現句を使用して列挙子を表すために使用する値を指定できますが、それはあなたが望むものとは思えません。

だけの識別子を使用します。

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

は偉大な答えをいただき、ありがとうございます。 –

2

次の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;