Scala 可能对象值的穷举匹配

Scala 可能对象值的穷举匹配,scala,pattern-matching,Scala,Pattern Matching,首先是守则: object MyEnums { sealed abstract class MyEnum(val value: String) case object First extends MyEnum("Some_ugly_looking_value1") case object Second extends MyEnum("Some_ugly_looking_value2") case object Third extends MyEnum("Some_ugly_lo

首先是守则:

object MyEnums {
  sealed abstract class MyEnum(val value: String)

  case object First extends MyEnum("Some_ugly_looking_value1")
  case object Second extends MyEnum("Some_ugly_looking_value2")
  case object Third extends MyEnum("Some_ugly_looking_value3")
  case object Fourth extends MyEnum("Some_ugly_looking_value4")

  def fromString(value: String): Option[MyEnum] =
    value match {
      case First.value => Option(First)
      case Second.value => Option(Second)
      case Third.value => Option(Third)
      case Fourth.value => Option(Fourth)
      case _ => None
    }
}
我在这里试图实现的是能够将来自外部的字符串值解析为上述枚举的形式。同时,如果我没有涵盖匹配表达式中的所有选项,我希望有详尽的模式匹配编译器警告。我有什么选择?我不喜欢上面实现的内容,因为如果这个枚举增长,我可能会忘记实现新的case子句…

这样考虑吧


现在,在添加新的case对象时,我们不必再处理模式匹配。

@MarioGalic-好吧,这个库太棒了,我一定会使用它。谢谢在Scala 3中,我们可能会开箱即用地获得enumeratum的功能,请参见的建议。我将不耐烦地等待Scala 3:)
import enumeratum._

sealed abstract class MyEnum(override val entryName: String) extends EnumEntry

object MyEnum extends Enum[MyEnum] {
  val values = findValues

  case object First extends MyEnum("Some_ugly_looking_value1")
  case object Second extends MyEnum("Some_ugly_looking_value2")
  case object Third extends MyEnum("Some_ugly_looking_value3")
  case object Fourth extends MyEnum("Some_ugly_looking_value4")
}


MyEnum.withName("Some_ugly_looking_value1") // res1: MyEnum = First