使用抽象作为枚举类型?

时间:2014-11-24 16:40:04

标签: enums haxe

我正在查看try.haxe.org上的“模式匹配 - 数组匹配”示例中的以下Haxe源代码 -

class Test {

    static function main() {
        var playerA = {
            name: "Simn",
            move: Move.Paper
        }
        var playerB = {
            name: "Nicolas",
            move: Move.Rock
        }

        // a switch can directly return something
        var winner = switch ([playerA.move, playerB.move])      {
            case [Move.Rock, Move.Paper]: playerB;
            case [Move.Scissors, Move.Paper]: playerA;
            default: null;
        }

        if (winner != null)         {
            trace('The winner is: ${winner.name}');
        }           else            {
            trace('Draw!');
        }
    }
}   

@:enum
abstract Move(Int)     {
    var Rock = 1;
    var Paper = 2;
    var Scissors = 3;
}

我的问题是:

  1. 符号@:enum表示什么?
  2. 为什么他们以这种方式创建枚举类型而不是简单地执行:

    枚举移动 {     岩石;     纸;     剪刀; }

1 个答案:

答案 0 :(得分:1)

@enum元数据通知编译器将抽象类视为枚举。主要优点是能够为每个常量定义值。

在示例的情况下,数组[Move.Rock,Move.Paper]将与[1,2]相同,但编译器将确保每个值都来自枚举类型。

你可以在这里找到更多 http://haxe.org/manual/types-abstract-enum.html