Scala 如何使用字符串常量创建枚举

Scala 如何使用字符串常量创建枚举,scala,Scala,我有一个scopt解析器,它接受颜色参数(“绿色”、“红色”、“蓝色”)。我想把字符串常量放在enum中,你们能帮我写它并把它放在项目中最好的地方吗(可能是package.scala) 这实际上在中进行了描述。只要您的枚举是一个单独的类型,您就可以为它创建scopt.Read // enumeration object Color extends Enumeration { type Color = Value val Red, Green, Blue = Value } // has

我有一个scopt解析器,它接受颜色参数(“绿色”、“红色”、“蓝色”)。我想把字符串常量放在enum中,你们能帮我写它并把它放在项目中最好的地方吗(可能是package.scala)


这实际上在中进行了描述。只要您的枚举是一个单独的类型,您就可以为它创建
scopt.Read

// enumeration
object Color extends Enumeration {
  type Color = Value
  val Red, Green, Blue = Value
}
// has to be imported manually as we cannot put it into `Value` companion
implicit val colorRead: scopt.Read[Color.Value] =
  scopt.Read.reads(Color withName _)

如果将
color
类型设置为
Config
color
字段,隐式
读取[color]
将使您能够解析配置中的
opt[color]
选项。

您尝试了什么?您的enum有什么要求?
// enumeration
object Color extends Enumeration {
  type Color = Value
  val Red, Green, Blue = Value
}
// has to be imported manually as we cannot put it into `Value` companion
implicit val colorRead: scopt.Read[Color.Value] =
  scopt.Read.reads(Color withName _)
// enumeratum
sealed trait Color EnumEntry
object Color extends Enum[Color] {
  case object Red extends Color
  case object Green extends Color
  case object Blue extends Color
  val values = findValues

  implicit val colorRead: scopt.Read[Color] =
    scopt.Read.reads(Color withName _)
}
// normal sealed trait
sealed trait Color EnumEntry
object Color extends Enum[Color] {
  case object Red extends Color
  case object Green extends Color
  case object Blue extends Color

  implicit val colorRead: scopt.Read[Color] =
    scopt.Read.reads {
      case "green" => Color.Green
      case "red"   => Color.Red
      case "blue"  => Color.Blue
    }
}