我在某个地方看到了以下解决方案
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 ....这有点icky。
我真正想要的是val lookupTable = Map(),当请求进来时,我可以查找“星期一”并将其翻译成我的枚举星期一并在整个软件中使用枚举。这通常是怎么做的。我看到了密封的特性,但没有看到一种方法来自动确保当有人添加一个扩展它的类时,它会自动添加到查找表中。有没有办法用查找表创建scala枚举?
scala Enumeration似乎很接近,因为它有一个values()方法,但是我没有看到如何传入表示我们从用户那里收到的日期的字符串,然后将其转换为枚举。
感谢, 迪安
答案 0 :(得分:1)
更新以向您展示如何重命名枚举值,添加其他构造函数参数以及如何向枚举中添加其他方法。
object Currency extends Enumeration {
sealed case class CurrencyVal(name: String, value: Int) extends Val(name) {
def *(n: Int): Int = n * value
}
val PENNY = CurrencyVal("penny", 1)
val NICKLE = CurrencyVal("nickle", 5)
val DIME = CurrencyVal("dime", 10)
val QUARTER = CurrencyVal("quarter", 25)
override def withName(name: String): CurrencyVal = {
super.withName(name).asInstanceOf[CurrencyVal]
}
}
如果您不覆盖withName
,那么您将获得Currency.Value
而不是Currency.CurrencyVal
。
答案 1 :(得分:0)
我看到了密封的特征,但没有看到自动确定的方法 当有人添加一个扩展它的类时,它会 自动添加到查找表中。有没有办法创建一个 带有查找表的scala枚举
我在这里制作了一个可能有用的小型库,名为Enumeratum。其用法如下:
some_func