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

しかし、これは識別子が「test」の場合にのみ一致しますが、任意の識別子と一致させたいです。

4

3 に答える 3

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

列挙型のその他のメソッドについては、 Typeドキュメントをお読みください。


更新(2019-02-04):

この回答を書いている時点では、まだHaxe2.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; }

「using」を使用すると、次のこともできるはずです。

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

あるいは:

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