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

Выражение 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) &amp; 0xFFFFFF);
            }
        }

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

Комментарии

Отправить комментарий

Содержание этого поля является приватным и не предназначено к показу.
  • Allowed HTML tags: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <blockcode> <dd>
  • Строки и параграфы переносятся автоматически.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • You can enable syntax highlighting of source code with the following tags: <code>, <blockcode>.

Подробнее о форматировании

CAPTCHA
Этот вопрос помогает предотвратить автоматический спам
Image CAPTCHA
Enter the characters shown in the image without spaces, also respect upper and lower case.
To prevent automated spam submissions leave this field empty.