5

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

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')) {

但这仅在标识符为“测试”时才匹配,但我想匹配任何标识符。

4

3 回答 3

5
Type.enumConstructor(tk) == "Identifier"

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


更新(2019-02-04):

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

目前,对于 Haxe 3(或 4),我建议使用模式匹配,特别是使用单一模式检查

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

这是一个简写

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

_是匹配任何东西的通配符。

于 2010-09-22T17:36:32.743 回答
3

或者:

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

使用“使用”,您还应该能够:

if(tk.isIdentifier()) {
于 2010-09-22T19:07:00.270 回答
2

甚至:

tk.match(Token.Identifier(_));
于 2015-12-04T21:42:30.700 回答