【发布时间】:2014-10-21 17:43:11
【问题描述】:
我在某处看到了以下枚举解决方案
object Day {
val values = new ArrayBuffer[Day]
case class Day(name:String) {
values += this
}
val MONDAY = new Day("monday")
val TUESDAY = new Day("tuesday")
}
这展示了我想要做什么,除了 ArrayBuffer 中隐藏了一个 var ......这有点恶心。
我真正想要的是一个 val lookupTable = Map() ,当请求进来时,我可以查找“星期一”并将其转换为我的枚举 MONDAY 并在整个软件中使用该枚举。这通常是如何完成的。我看到了密封的特征,但没有看到一种方法来自动确保当有人添加一个扩展它的类时,它会自动添加到查找表中。有没有办法用查找表创建一个 scala 枚举?
Scala 枚举似乎很接近,因为它有一个 values() 方法,但我不知道如何传入代表我们从用户那里收到的日期的字符串,然后将其转换为枚举。
谢谢, 院长
【问题讨论】:
-
withName方法不是你想要的吗? scala-lang.org/api/current/index.html#scala.Enumeration -
您会在运行时创建
Day类型的新版本,还是会成为一种枚举?如果是枚举,你见过this question about macro-based sealed trait enums 或this one吗? -
withName扫描枚举值以寻找匹配项,因此创建查找表有好处。
标签: scala scala-2.10