Выражение switch в haXe обладает особенной семантикой, когда используется на
перечислении. Если отсутствует default, будет произведена проверка, что все
конструкторы перечисления использованы, и вы получите ошибку, если нет. Например, используя первый
enum Color:
switch( c ) {
case red: 0xFF000;
case green: 0x00FF00;
}
Это вызовет
ошибку компиляции сообщающую, что конструктор 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);
}
}
}
Использование switch - единственный возможный способ доступа к параметрам конструкторов.