比较枚举而不考虑其参数

时间:2010-09-22 16:31:36

标签: haxe

让我说清楚,我有这个枚举:

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 个答案:

答案 0 :(得分:5)

Type.enumConstructor(tk) == "Identifier"

有关枚举的更多方法,请阅读Type doc


更新(2019-02-04):

在撰写此答案时,它仍然是Haxe 2.06。从那以后发生了很多变化。

目前,对于Haxe 3(或4),我建议pattern matching,特别是使用single pattern check代替:

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

这是

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

_是匹配任何内容的通配符。

答案 1 :(得分:3)

或者:

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

使用“使用”你也应该能够:

if(tk.isIdentifier()) {

答案 2 :(得分:2)

甚至:

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