2014-11-24 95 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