假設我有一個列舉顏色,其中包含我的程式可能的顏色值:紅色、藍色和橙色。然后我想添加適用于這些顏色的方法。如何在 Scala 中添加這些方法?
enum Color {
case Red
case Blue
case Orange
}
我正在使用 Scala 版本 3。
我嘗試創建一個類,該類將列舉型別 Color 的值作為引數,并包含列舉所需的方法。但是,我確實認為有更好的方法來處理這種情況。
uj5u.com熱心網友回復:
您可以直接向列舉添加方法。
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
}
列舉及其 case 是 Scala 2 中已經存在的特性的有效語法糖,例如 case 類和密封抽象類。因此,從概念上講,您可以將其enum視為定義一個成熟的抽象類,而每個類都case定義為一個子類。它們都可以有方法,案例從列舉繼承方法,整個事情就像一個 OOP 類層次結構,因為它實際上是一個。
您可以閱讀有關在該功能的原始問題跟蹤器上進行的準確翻譯。實際上,每個都case被編譯為 acase class或 a val,這取決于它是否需要任何自定義方法。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/401911.html
標籤:斯卡拉
下一篇:在Scala中保存當前狀態
