2014-11-24 92 views
0

我在看下面的HAXE源代码从“模式匹配 - 矩阵匹配”在try.haxe.org例子 -使用抽象为枚举类型?

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

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

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

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