Ada:如何枚举由整数和其他类型组成的类型?
Ada: How to enumerate a type that consists of integers and other types?
例如,我想创建一个表示所有牌组(即 2-10、J、Queen、K 和 Ace)的类型。
我想到了这样做:
type Rank is (2,3,4,5,6,7,8,9,10,Jack,Queen,King,Ace);
但是我得到这个错误:
identifier expected
你不能。
枚举类型声明中的列表由标识符 and/or 字符文字组成。在那个上下文中你不能有整数文字。
您可以使用表示子句指定用于表示枚举数的值,但我认为这不是您想要的。
只需使用标识符:
type Rank is (R2,R3,R4,R5,R6,R7,R8,R9,R10,Jack,Queen,King,Ace);
您可以声明两个辅助类型和一个组合类型:
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;
例如,我想创建一个表示所有牌组(即 2-10、J、Queen、K 和 Ace)的类型。
我想到了这样做:
type Rank is (2,3,4,5,6,7,8,9,10,Jack,Queen,King,Ace);
但是我得到这个错误:
identifier expected
你不能。
枚举类型声明中的列表由标识符 and/or 字符文字组成。在那个上下文中你不能有整数文字。
您可以使用表示子句指定用于表示枚举数的值,但我认为这不是您想要的。
只需使用标识符:
type Rank is (R2,R3,R4,R5,R6,R7,R8,R9,R10,Jack,Queen,King,Ace);
您可以声明两个辅助类型和一个组合类型:
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;