在Scala中并无枚举类型,但在标准类库中提供了Enumeration类来产出枚举。扩展Enumeration类后,调用Value方法来初始化枚举中的可能值。app
内部类Value其实是一个抽象类,真正建立的是Val。由于其实是Val,因此能够为Value传入id和namespa
若是不指定,id就是在前一个枚举值id上加一,name则是字段名scala
object TrafficLightColor extends Enumeration { type TrafficLightColor = Value val Red = Value(0, "Stop") val Yellow = Value(10) val Green = Value("Go") } object Margin extends Enumeration { type Margin = Value val TOP, BOTTOM, LEFT, RIGHT = Value } import test.TrafficLightColor._ import test.Margin._ object Driver extends App { println(BOTTOM, BOTTOM.id) def doWhat(color: TrafficLightColor) = { if (color == Red) "stop" else if (color == Yellow) "hurry up" else "go" } //使用match匹配 def doWhat2(color: TrafficLightColor) = color match { case Red => "stop" case Yellow => "hurry up" case _ => "go" } // load Red val red = TrafficLightColor(0) // Calls Enumeration.apply println(red, red.id) println(doWhat(red)) println(doWhat2(TrafficLightColor.Yellow)) //打印出全部枚举 Margin.values.foreach { v => println(v,v.id)} }