Scala 检查我的枚举值中是否存在某些字符串,而不存在NoTouchElement异常

Scala 检查我的枚举值中是否存在某些字符串,而不存在NoTouchElement异常,scala,enums,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

我有以下代码:

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


谢谢

您可以将枚举定义为:

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

这似乎起到了作用:

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,而不是引发异常。

自2.10以来,构造枚举的方法已被弃用。是的,您看到了它并根据答案更新了代码。。去掉了eclipse中显示的警告插件。。tnxThanks,valueOf很有用,因为它返回选项!我还不太喜欢Scala,但正在学习喜欢它:-)如果值不是字符串,我该怎么办?例:val缺失_部分:值=值(4)