他の言語で行う方法でAS3に列挙型を定義する方法はありますか?次のような定義値で定数を定義できます。
private const CONST_1:int = 0;
private const CONST_2:int = 1;
private const CONST_3:int = 2;
等々。 3つの間に他の定数を挿入したい場合は、次のようにすべての値を移動する必要があります。
private const CONST_1:int = 0;
private const CONST_2:int = 1;
private const CONST_2A:int = 2;
private const CONST_3:int = 3;
他の言語では、次のような列挙型クロージャに新しいメンバーを追加するだけで済みます。
enum {
CONST_1 = 0,
CONST_2,
CONST_2A,
CONST_3
} MyConstEnum;
AS3には似たようなものがありますか?
ありがとう
AS3には列挙型がありません。自分でコーディングする必要があります。より安全な型チェックが必要な場合は、たとえばクラスごとにそれらをシミュレートできます。
public static var NUM_ENUM_VALUES:int = 0;
public static const EV_MONDAY:int = NUM_ENUM_VALUES++;
public static const EV_TUESDAY:int = NUM_ENUM_VALUES++;
public static const EV_WEDNESDAY:int = NUM_ENUM_VALUES++;
public static const EV_THURSDAY:int = NUM_ENUM_VALUES++;
ActionScript仮想マシンでサポートされているさまざまな変数タイプを確認できます。変数タイプにはtraitsという注釈が付けられており、その多様性は 仕様 の表4.8.1にあります。
4.8.1特性タイプの要約 次の表は、特性タイプを要約しています。 タイプ値 Trait_Slot0 Trait_Method 1 Trait_Getter 2 Trait_Setter 3 Trait_Class 4 Trait_Function 5 Trait_Const 6
Trait_Enum
はありません。また、Trait_Const
の説明では、定数プールからの定数のみが許可されるため、次のようになります。 :
たとえば、列挙型は符号付き整数または符号なし整数で作成できますが、仮想マシンは、これらの型を使用した操作の型安全性チェックを実行しません。 (たとえば、使用されるgetlocal
またはcoerce
オペコードは、それぞれgetlocal_i
およびcoerce_i
になります。)
ABC形式には、私が知っている列挙型の組み込みプロビジョニングがありません。
列挙値ごとにオブジェクトタイプを使用すると、特にコンパイラがcoerce
を使用する前にそのタイプのgetlocal
命令を発行し、それ以外の場合はistype
およびastype
バリアント。たとえば、オブジェクトでsetproperty
またはgetproperty
を呼び出すと、整数を使用するよりも遅くなります。特に、そのプロパティがgetterまたはsetterメソッドにバインドされている場合はそうです。
他の回答にリンクされている置換スタイルがあります。これらのスタイルの実行時パフォーマンスへの影響を評価するには、 swftoools オープンソースのFlashツールコレクションからswfdump -D
を使用できます。