Scala/Enum

Scala/Enum

Javaの機能で非常に強力な機能が Enum である。これを Scala でも使いたい。 そして Enum の機能自体は Scala に標準で備わっている・・・のだがこれが使い勝手悪いっぽく、独自実装したほうがよいということで

このように実装する

object Sample {
  case object S extends Sample(1, "s")
  case object A extends Sample(2, "a")
  case object M extends Sample(3, "m")
  case object P extends Sample(4, "p")
  case object L extends Sample(5, "l")
  case object E extends Sample(6, "e")
 
  val values = Array(S, A, M, P, L, E)
 
  def valueOf(code:Int):Sample = {
    code match {
      case S.v => S
      case A.v => A
      case M.v => M
      case P.v => P
      case L.v => L
      case E.v => E
    }
  }
}
sealed abstract class Sample(code:Int, name:String) {
  val c = code;
  val n = name;
}

このように、Java の Enum 同等に使える

var s:Sample = Sample.S
println(s.c) // => "1"
scala/enum.txt · 最終更新: 2015-08-19 11:53 by ore