JavaでEnumをよく使うがScala版はよくわからなかったのでメモ
/*
* 指定した曜日コードからcodeとnameをタプル形式で取得する
*/
object EnumWeek extends App {
(1 to 5).toList.foreach(a => println( Week.code(a) ) )
}
結果は、英語と日本語で曜日が取れた。
(monday,月曜日)
(tuesday,火曜日)
(wednesday,水曜日)
(thursday,木曜日)
(friday,金曜日)
Enumは以下リンクのサイト参考。
trait EnumLike {
type Value
def value: Value
}
trait Enum[T] extends EnumLike {
type Value = T
}
trait EnumCompanion[A <: EnumLike] {
def values: Seq[A]
def valueOf(value: A#Value): Option[A] = values.find(_.value == value)
}
abstract sealed class WeekType[T](val value: Int) extends Enum[Int]{
def code: T
def name: T
}
object Week extends EnumCompanion[WeekType[String]]{
case object MONDAY extends WeekType[String](1){
override def code = "monday"
override def name = "月曜日"}
case object TUESDAY extends WeekType[String](2){
override def code = "tuesday"
override def name = "火曜日" }
case object WEDNESDAY extends WeekType[String](3){
override def code = "wednesday"
override def name = "水曜日" }
case object THURSDAY extends WeekType[String](4){
override def code = "thursday"
override def name = "木曜日" }
case object FRIDAY extends WeekType[String](5){
override def code = "friday"
override def name = "金曜日" }
lazy val values = Seq(MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY)
def code(cd:Int): (String, String) = {
(valueOf(cd).map(_.code).getOrElse(""), valueOf(cd).map(_.name).getOrElse(""))
}
}