Сравните перечисление, не рассматривая его аргументы - PullRequest
5 голосов
/ 22 сентября 2010

Позвольте мне прояснить это, у меня есть это перечисление:

enum Token {
    Number(v:Float);
    Identifier(v:String);
    TString(v:String);
    Var;
    Assign;
    Division;
    // and so on
}

Я хочу проверить, является ли значение переменной идентификатором, но это не работает:

if(tk == Token.Identifier) {

Это позволяет мне сравнивать значения только если я передаю аргументы:

if(tk == Token.Identifier('test')) {

Но это будет совпадать, только если идентификатор «test», но я хочу сопоставить любой идентификатор.

Ответы [ 3 ]

5 голосов
/ 22 сентября 2010
Type.enumConstructor(tk) == "Identifier"

Прочтите Тип документа , чтобы узнать больше методов перечисления.


Обновление (2019-02-04):

Во времяНаписание этого ответа было все еще Haxe 2.06.С тех пор многое изменилось.

На данный момент, для Haxe 3 (или 4), я бы порекомендовал сопоставление с шаблоном , в частности, вместо этого проверка одного шаблона :1015 *

if (tk.match(Identifier(_)) ...

, что является короткой рукой для

if (switch tk { case Identifier(_): true; case _: false; }) ...

_ - это подстановочный знак, который соответствует чему-либо.

3 голосов
/ 22 сентября 2010

альтернативно:

static function isIdentifier(token : Token) return switch(token) { case Token.Identifier(_): true; default: false; }

Используя «использование», вы также должны уметь:

if(tk.isIdentifier()) {
2 голосов
/ 05 декабря 2015

Или даже:

tk.match(Token.Identifier(_));
...