web-dev-qa-db-ja.com

as3で列挙型を定義する方法は?

他の言語で行う方法で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には似たようなものがありますか?

ありがとう

21
Nava Carmon

AS3には列挙型がありません。自分でコーディングする必要があります。より安全な型チェックが必要な場合は、たとえばクラスごとにそれらをシミュレートできます。

25
Patrick
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++;
12
KAndrw

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を使用できます。

10
Heath Hunnicutt