我有以下代码:
object Order extends Enumeration("asc", "desc") {
type OrderType = Value
val asc, desc = Value
}
我用它:
val someStr:String = "someStr"
val order = Order.withName(someStr)
这给了我输入字符串的枚举,但如果我发送字符串“asc1”,我得到例外:
NoSuchElementException: None.get (ProductRequest.scala
我的问题是 - 我可以迭代值并检查字符串是否存在?这样我可以抛出更好的详细异常..
我在想我可以迭代Order.values - >但是找不到有用的东西
由于
答案 0 :(得分:23)
您可以将枚举定义为:
object Order extends Enumeration {
type OrderType = Value
val asc = Value("asc")
val desc = Value("desc")
def isOrderType(s: String) = values.exists(_.toString == s)
}
并使用它:
Order.isOrderType("asc") //> res0: Boolean = true
Order.isOrderType("foo") //> res1: Boolean = false
答案 1 :(得分:4)
这似乎可以解决问题:
object EnumerationTypes extends App {
object Order extends Enumeration {
type OrderType = Value
val asc = Value("asc")
val desc = Value("desc")
def valueOf(name: String) = this.values.find(_.toString == name)
}
println(Order.valueOf("asc")) // Some(asc)
println(Order.valueOf("ascending")) // None
}
当字符串无效而不是抛出异常时,它返回None。