scala - 添加对 Scala 枚举进行操作的方法

标签 scala

假设我有一个枚举颜色,其中包含我的程序可能的颜色值:红色、蓝色和橙色。 然后我想添加适用于这些颜色的方法。如何在 Scala 中添加这些方法?

enum Color {
  case Red
  case Blue
  case Orange
}

我正在使用 Scala 版本 3。

我尝试制作一个类,该类将枚举类型 Color 的值作为参数,并包含枚举所需的方法。不过,我确实认为有更好的方法来处理这种情况。

最佳答案

您可以将方法直接添加到枚举中。

enum Color {
  case Red
  case Blue
  case Orange

  def colorToInt: Int = this match {
    case Red => ...
    case Blue => ...
    case Green => ...
  }

  // etc ...

}

或者,每个枚举案例都可以有自己的方法。根据您拥有的枚举案例数量,以这种风格编写代码会更整洁。

enum Color {

  case Red extends Color {
    override def colorToInt: Int = ...
  }

  case Blue extends Color {
    override def colorToInt: Int = ...
  }

  case Orange extends Color {
    override def colorToInt: Int = ...
  }

  def colorToInt: Int // Note: abstract method
}

枚举和它们的案例是 Scala 2 中已经存在的功能的有效语法糖,例如案例类和密封抽象类。所以从概念上讲,您可以将 enum 视为定义一个完整的抽象类,而将每个 case 视为定义一个子类。它们都可以有方法,案例从枚举继承方法,整个事情就像 OOP 类层次结构一样工作,因为它实际上一个。

您可以阅读发生的确切翻译 on the original issue tracker for the feature .实际上,每个 case 都被编译为 case classval,具体取决于它是否需要任何自定义方法。

关于scala - 添加对 Scala 枚举进行操作的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70550389/

相关文章:

scala - Scala 中的进程级并行性

json - 如何将由 String 和 Seq[String] 值组成的 Scala Map 转换为 JSON?

scala - 我可以在一行中在 Scala 中制作 "public val"但 "private var"吗?

scala - 使用 Spark Dataframe scala 将多个不同列转换为 Map 列

scala - 在 Scala 进程中使用 $ 访问环境变量

scala - Play Framework 2.0 和 Selenium 入门

scala - Json 转换器 - 来自 2 个现有字段的新字段

scala - 如何将我的Spray API部署到生产中?

string - Scala在字符串中查找字符串的位置

multithreading - Scala 流生产和处理的多线程