Как определить перечисление в 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
задан Assaf Lavie 11 May 2010 в 07:40
поделиться

2 ответа

В AS3 нет перечислений, их нужно кодировать самостоятельно. Вы можете смоделировать их, например, классом, если хотите более безопасную проверку типов:

25
ответ дан 29 November 2019 в 20:12
поделиться

Вы можете взглянуть на разнообразие типов переменных, поддерживаемых виртуальной машиной 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 с открытым исходным кодом.

10
ответ дан 29 November 2019 в 20:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: