让我说清楚,我有这个枚举:
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'时匹配,但我想匹配任何标识符。
答案 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(_));