Switch на перечислении

Выражение switch в haXe обладает особенной семантикой, когда используется на перечислении. Если отсутствует default, будет произведена проверка, что все конструкторы перечисления использованы, и вы получите ошибку, если нет. Например, используя первый enum Color:

    switch( c ) {
        case red: 0xFF000;
        case green: 0x00FF00;
    }
</div>

Это вызовет ошибку компиляции сообщающую, что конструктор blue не использован. В этом случае вы можете либо добавить case для этого конструктора, либо добавить default, который делает что-либо. Это может быть очень полезным, потому что когда вы добавляете новый конструктор в свой enum ошибки компилятора покажут в вашей программе места, где должны обрабатываться новые конструкторы.

===== Switch и параметры конструкторов =====

Если у конструктора enum есть параметры, они должны быть перечислены как имена переменных в объявлениях выражений case внутри switch. Таким образом все переменные будут доступны внутри выражений case в соответствии с типом параметра конструктора enum. Например, используя перечисление Color3 :

    class Colors {
        static function toInt( c : Color3 ) : Int {
            return switch( c ) {
                case red: 0xFF000;
                case green: 0x00FF00;
                case blue: 0x0000FF;
                case grey(v): (v << 16) | (v << 8) | v;
                case rgb(r,g,b): (r << 16) | (g << 8) | b;
                case alpha(a,c): (a << 24) | (toInt(c) & 0xFFFFFF);
            }
        }

    }
</div>

Использование switch - единственный возможный способ доступа к параметрам конструкторов.