代码之家  ›  专栏  ›  技术社区  ›  user216441

比较枚举而不考虑其参数

  •  5
  • user216441  · 技术社区  · 14 年前

    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 回复  |  直到 14 年前
        1
  •  5
  •   Andy Li    5 年前
    Type.enumConstructor(tk) == "Identifier"
    

    阅读 Type doc


    更新(2019-02-04):

    目前,对于haxe3(或4),我建议 pattern matching single pattern check 取而代之的是:

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

    它是

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

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

        2
  •  3
  •   Franco Ponticelli    9 年前

    或者:

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

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

    if(tk.isIdentifier()) {
    
        3
  •  2
  •   azrafe7    9 年前

    甚至:

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