scala 列舉

weixin_34337265發表於2018-03-28

scala沒有列舉型別, 標準庫定義了一個Enumeration的助手類, 可以用於產出列舉

示例程式碼:

object CharType extends Enumeration {
  type CharType = Value
  val TYPE_SPACE = Value              // 空白字元
  val TYPE_ARABIC = Value              // 阿拉伯數字
  val TYPE_ENGLISH = Value             // 英文字元
  val TYPE_CHINESE = Value             // 中文字元
  val TYPE_ENGLISH_FORM = Value        // 英文標點
  val TYPE_CHINESE_FORM = Value        // 中文標點
  val TYPE_USELESS = Value             // 無效字元
}

每次呼叫Value方法都會返回內部類的新例項,該內部類也叫Value
可以傳向Value傳ID, 名稱, 或兩個都傳;
未定義時, ID預設從0開始, 累計加1, 預設名稱為欄位名

val Red = Value(0, "Red")
val Yellow = Value(10)
val Green = Value("Green")

注意列舉成員的型別是CharType.Value 而不是 CharType, 為了引入方便, 可以在CharType中定義一個型別別名:
type CharType = Value
這樣當 import CharType._ 就可以用CharType 表示 CharType.TYPE_ARABIC的型別了

  for (c <- CharType.values) println(c.id + ":" + c)

通過ID查詢Value:
CharType(0) // 如果不存在: java.util.NoSuchElementException:
CharType.withName("TYPE_SPACE")

均返回 CharType.Value型別