2014-02-14 69 views

回答

1

您可能必須先轉換:

Enumeration and mapping with Scala 2.10

我想這兩個答案有相關性,但我完全忘記我的。

這個線程

https://groups.google.com/d/msg/scala-internals/8RWkccSRBxQ/snNuzjJakhkJ

可能標誌着漫長的道路,以枚舉更換開始。它包含一些關於使用的不同(雙語警告)意見。

的道路上提前終止:

https://stackoverflow.com/a/4346618/1296806

+0

我想最後一個鏈接說得對:「老實說,我不會使用枚舉。這是一個源於Scala 1.0(2004)的類」 – Edmondo1984

3

使用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) 
+0

類型轉換是死的強類型的編程語言。 – Edmondo1984

+0

不幸的是,你需要有時候使用它們,喜歡與否。 – cyrillk

1

您是否嘗試過隱式轉換?記住要保持範圍緊:

// 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! 

Working Example


赤了Better example通過Sean Ross

+0

好的。它更好地使用枚舉。 – cyrillk

+0

答案是一樣的。我是演員的主要敵人:) – Edmondo1984

+0

如果你這麼認爲,繼續做自己的實現(我會親自採取演員重塑車輪)。規則被打破。 –