比较枚举而不考虑其参数

问题描述 投票:5回答:3

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

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'时匹配,但我想匹配任何标识符。

haxe
3个回答
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; }) ...

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


3
投票

或者:

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

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

if(tk.isIdentifier()) {

2
投票

甚至:

tk.match(Token.Identifier(_));
© www.soinside.com 2019 - 2024. All rights reserved.