我想在Scala中實現一個Rich枚舉,我的枚舉也必須實現一個特性。在Scala中迭代豐富的枚舉
這項工作很好,但是當我試圖遍歷枚舉,該Enumeration.values返回ValueSet,這是Enumeration.Value
的集合是否有實現此功能的簡單方法,而不去宏和密封特性建議從特拉維斯布朗Iteration over a sealed trait in Scala??
我想在Scala中實現一個Rich枚舉,我的枚舉也必須實現一個特性。在Scala中迭代豐富的枚舉
這項工作很好,但是當我試圖遍歷枚舉,該Enumeration.values返回ValueSet,這是Enumeration.Value
的集合是否有實現此功能的簡單方法,而不去宏和密封特性建議從特拉維斯布朗Iteration over a sealed trait in Scala??
您可能必須先轉換:
Enumeration and mapping with Scala 2.10
我想這兩個答案有相關性,但我完全忘記我的。
這個線程
https://groups.google.com/d/msg/scala-internals/8RWkccSRBxQ/snNuzjJakhkJ
可能標誌着漫長的道路,以枚舉更換開始。它包含一些關於使用的不同(雙語警告)意見。
的道路上提前終止:
使用Enumeration類可以相對容易地完成scala中的枚舉。下面是它的一個例子。
trait Num {
def echo
}
object Status extends Enumeration {
case class StatusVal(code: Int, name: String) extends Val with Num {
override def echo {
println("Number: " + name)
}
}
val ONE = StatusVal(1, "One")
val TWO = StatusVal(2, "Two")
val THREE = StatusVal(2, "Three")
}
Status.values foreach (s => s.asInstanceOf[Num].echo)
類型轉換是死的強類型的編程語言。 – Edmondo1984
不幸的是,你需要有時候使用它們,喜歡與否。 – cyrillk
您是否嘗試過隱式轉換?記住要保持範圍緊:
// I have deliberated stolen @cyrillk example :).
// Just add this line to the body os Status (Enumeration Object)
implicit def valueToNum(v: Value): Num = v.asInstanceOf[Num]
Value
將隱式轉換爲Num
,所以:
Status.values foreach (s => s.echo) // works!
好的。它更好地使用枚舉。 – cyrillk
答案是一樣的。我是演員的主要敵人:) – Edmondo1984
如果你這麼認爲,繼續做自己的實現(我會親自採取演員重塑車輪)。規則被打破。 –
我想最後一個鏈接說得對:「老實說,我不會使用枚舉。這是一個源於Scala 1.0(2004)的類」 – Edmondo1984