Ответ 1
Нет 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 что-то подобное?
Спасибо
Нет 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. Типы переменных аннотируются чертами, разнообразие которых можно найти в спецификации таблица 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
из