Существует ли способ определить перечисление в 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 нет перечислений, их нужно кодировать самостоятельно. Вы можете смоделировать их, например, классом, если хотите более безопасную проверку типов:
Вы можете взглянуть на разнообразие типов переменных, поддерживаемых виртуальной машиной 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
разрешены только константы из пула констант, так что это будут:
Enums могут быть сделаны, например, из знаковых или беззнаковых целых чисел, но виртуальная машина не будет выполнять проверку безопасности типов операций, использующих эти типы. (Например, опкоды getlocal
или coerce
будут getlocal_i
и coerce_i
, соответственно.)
Формат ABC не имеет встроенного положения для типов перечислений, насколько я знаю.
Использование объектного типа для каждого значения перечисления может работать, особенно если компилятор выдает инструкции coerce
для этого типа перед использованием getlocal
и не использует объект иначе, чем в вариантах istype
и astype
. Например, вызов setproperty
или getproperty
на объекте будет медленнее, чем использование целого числа - особенно если это свойство связано с методом getter или setter.
Существуют стили замены, ссылки на которые были даны в других ответах. Чтобы оценить влияние этих стилей на производительность во время выполнения, можно использовать swfdump -D
из коллекции swftoools инструментов Flash с открытым исходным кодом.