Scala:如何根据值和标签获取枚举元素?

Scala: How to get Enumeration element based on values and labels?

我有两个枚举 类 定义如下。

object Rating extends Enumeration {
  type Rating = Value
  val LOW: Value = Value("Low")
  val AVERAGE: Value = Value("Average")
  val HIGH: Value = Value("High")
}

object Reason extends Enumeration {
  type Reason = Value
  val MISSING_PARTS: Value = Value(1)
  val WRONG_ITEM: Value = Value(2)
  val DEFECTIVE_ITEM: Value = Value(3)
}
  1. 如何根据字符串值 "Low"、"Average" 和 "High"

  2. 获取评级
  3. 如何根据整数值 1、2、3 获取原因

  4. 如何根据 val 名称获取 Reason MISSING_PARTS、WRONG_ITEM、DEFECTIVE_ITEM

如果我使用的术语不正确,请纠正我。我来自 Java 背景并且是 Scala 的新手。我进行了很多搜索,但要么它们已经过时,要么它们使用非常琐碎的示例,其中标签和值是相同的字符串,这没有多大帮助。

任何帮助将不胜感激。

  1. Rating.withName("Low")
  2. Reason(1)(shorthand 对应 Reason.apply(1)
  3. Reason.withName("DEFECTIVE_ITEM")

解释:

每个枚举值都有一个 ID 和一个名称。除非您使用适当的 Value(...) 重载覆盖它们,否则两者都是使用默认值生成的。在这种情况下,Rating 自定义了 namesReason 自定义了 IDs。根据上面的代码,这些是分配给每个值的名称和 ID:

val LOW: Value = Value("Low")         // Id: 0; Name: Low
val AVERAGE: Value = Value("Average") // Id: 1; Name: Average
val HIGH: Value = Value("High")       // Id: 2; Name: High

val MISSING_PARTS: Value = Value(1)   // Id: 1; Name: MISSING_PARTS
val WRONG_ITEM: Value = Value(2)      // Id: 2; Name: WRONG_ITEM
val DEFECTIVE_ITEM: Value = Value(3)  // Id: 3; Name: DEFECTIVE_ITEM

现在,我们可以使用 withName(name: String)apply(id: Int) 访问特定值,它们分别基于名称和 ID 引用值。