检查我的枚举值中是否存在某些字符串而没有NoSuchElement异常

时间:2014-03-23 10:09:10

标签: scala enums

我有以下代码:

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 - >但是找不到有用的东西

由于

2 个答案:

答案 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。