Подтвердить что ты не робот

Как определить перечисление в 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 что-то подобное?

Спасибо

4b9b3361

Ответ 2

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++;

Ответ 3

Вы можете взглянуть на множество типов переменных, поддерживаемых виртуальной машиной ActionScript. Типы переменных аннотируются чертами, разнообразие которых можно найти в спецификации таблица 4.8.1:

4.8.1 Summary of trait types
The following table summarizes the trait types.

Type           Value
Trait_Slot       0
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.

Существуют стили замены, которые были связаны в других ответах. Чтобы оценить влияние производительности этих стилей на производительность во время выполнения, вы можете использовать swfdump -D из