有没有办法抽象枚举值集?

时间:2014-07-25 00:12:27

标签: scala enums

我使用scala 2.11,我有以下枚举:

object Gender extends Enumeration {
  val male = Value("Male")
  val female = Value("Female")
}

object EmailType extends Enumeration{
  val personal = Value("Personal")
  val work = Value("Work")
  val other = Value("Other")
} //object

有了这个,我可以用

创建一个表示枚举的字符串列表
Gender.values.toList.map(_.toString)

EmailType.values.toList.map(_.toString)

我想用这样的方法来解释

def enumToString(values: <type here>): List[String] = values.toList[_.toString]

我从枚举中获得的类型是

val v1: Gender.ValueSet = Gender.values
val v2: EmailType.ValueSet = EmailType.values

我不知道如何抽象这两种类型来创建上面显示的泛型函数。这有什么抽象可以吗?

2 个答案:

答案 0 :(得分:3)

你可以这样做:

def enumToString[E <: Enumeration](e: E) = e.values.toList.map(_.toString)

并使用它:

enumToString(Gender) //List(Male, Female)
enumToString(EmailType) //List(Personal, Work, Other)

答案 1 :(得分:3)

如果你想传递values,那么这将有效:

def enumToString(values: Traversable[Enumeration#Value]): List[String] =
  values.toList.map(_.toString)

scala> enumToString(Gender.values.toList ++ EmailType.values.toList)
res1: List[String] = List(Male, Female, Personal, Work, Other)