Scala における列挙(Enumeration)

Scala の列挙サポート

Scala では列挙を言語の構文としてではなく、scala.Enumerationというライブラリとして提供している。Color の列挙を定義するには以下のようにする。

package etc9
object Color extends Enumeration {
  val Red, Green, Blue = Value 
}

Enumeration には反復処理のための様々なメソッドが定義されている。例えば全要素を出力するには

Color.foreach(println)

とすると以下の出力が得られる。

etc9.Color(0)
etc9.Color(1)
etc9.Color(2)

列挙への名前設定

Enumeration には以下のメソッドが定義されている。

def Value(name: String): Value

このValue に名前を渡すことで、列挙へ名前を付けることができる。

package etc9
object Color extends Enumeration {
  val Red   = Value("R")
  val Green = Value("G")
  val Blue  = Value("B")
}
for (c <- Color) print(c + " ")

以下の出力となる。

R G B 

id を指定するには以下。

  val Red   = Value(10, "R")
  val Green = Value(20, "G")
  val Blue  = Value(30, "B")

Enumeration の各種メソッド

scala.Enumeration の定義見た方が早いので、一例だけ。

  println(Color.valueOf("G")) //Some(G)
  println(Color.Blue.id) // 30
  println(Color(20)) // G