2008-12-01 5 views
20

Одна вещь, которая мне очень нравится в AS3 над AS2, - это то, насколько она добавляет больше времени для компиляции. Однако, как представляется, несколько не хватает того, что нет доступной структуры перечисления, проверенной типом. Какой хороший (лучший/общедоступный) способ сделать пользовательские перечисленные типы в AS3?Перечисления в AS3/Flash/Flex?

ответ

17

ваш ответ после скачка :-)

Enumerations with classes

+0

Хороший ответ, спасибо! – HanClinto 2008-12-01 00:50:05

+0

Ссылка не работает. – Joe 2011-02-07 01:37:13

+0

, пока мое редактирование пересматривается. Я думаю, что эта ссылка будет аналогична той, которая изначально была предоставлена: [Перечисления с классами] (http://help.adobe.com/en_US/ActionScript/3.0_ProgrammingAS3/WS5b3ccc516d4fbf351e63e3d118a9b90204-7f2f.html) – gltovar 2011-02-07 21:19:28

1

Я знаю, это немного устарел и точно не ответить на ваш вопрос, но вы могли бы хотеть выезд haXe. Вы также можете использовать его для генерации as3 для вас, плюс есть много других причин для его использования. Но это действительно сходит с ума ...

1

Недавно я обнаружил, что as3commons library имеет хороший базовый вспомогательный класс Enum для выполнения перечислений.

1

Для того, чтобы быть истинного перечисления ему необходимо как:

  • Принудительно типобезопасность
  • Предотвращение несанкционированных экземпляров

Мало кто из простых решений сделать оба, и базовая классы, которые являются чрезмерно сложными ИМО.

Мой текущий фаворит следующий стиль - безопасный и простой, и не должны никого смущать:

public final class FruitEnum { 
    private static const CREATE:Object = {}; 

    public static const APPLE:FruitEnum = new FruitEnum(CREATE); 
    public static const ORANGE:FruitEnum = new FruitEnum(CREATE); 
    public static const BANANA:FruitEnum = new FruitEnum(CREATE); 

    public function FruitEnum(permission:Object) { 
     if (permission !== CREATE){ 
      throw new Error("Enum cannot be instantiated from outside"); 
     } 
    } 
} 

РИСКОВАННАЯ: Я видел редкие случаи, в которых переменная инициализации считывает перечислимую сопзЬ перед тем она застывала , но в этих случаях проблема одинаково применима к другим эмуляциям enum на основе const.