开发者

Compare enum without considering its arguments

Let me make this clear, I have this enum:

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

I want to check if the value of a variable is an Identifier, but this doesn't work:

if(tk == Token.Identifier) {

It only allows me to compare the开发者_如何转开发 values if I pass arguments:

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

But this will only match if the identifier is 'test', but I want to match any identifier.


Type.enumConstructor(tk) == "Identifier"

Read the Type doc for more methods on enum.


Update (2019-02-04):

At the time of writing this answer it was still Haxe 2.06. Much have changed since then.

At this moment, for Haxe 3 (or 4), I would recommend pattern matching, specifically using single pattern check instead:

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

which is a short hand for

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

_ is the wildcard that matches anything.


alternatively:

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

Using "using" you should also be able to do:

if(tk.isIdentifier()) {


Or even:

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

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜