2011-07-15 72 views
6

我想知道你是否可以在Scala中擴展現有的枚舉。例如:如何在Scala中擴展現有的枚舉對象?

object BasicAnimal extends Enumeration{ 
    type BasicAnimal = Value 
    val Cat, Dog = Value 
} 

這能延長是這樣的:

object FourLeggedAnimal extends BasicAnimal{ 
    type FourLeggedAnimal = Value 
    val Dragon = Value 
} 

然後,在FourLeggedAnimal元素將貓,狗與龍。這可以做到嗎?

回答

3

不,你不能這樣做。 extends之後的標識符BasicAnimal不是一種類型,它是一個值,所以不幸的是它不起作用。

+0

哦,我看到了我的方式的錯誤。我添加了一個新的回覆,所以我可以正確編寫代碼。 – Henry

+0

它不會讓我發佈,因爲聲譽。基本上,您可以將對象定義爲抽象類並對其進行擴展,然後實例化直接擴展相應類的對象。 – Henry

+0

代碼如下:http://codepaste.net/24vfhv 對不起,發送垃圾郵件。 – Henry

1

可能就是這樣:

object E1 extends Enumeration { 
    type E1 = Value 
    val A, B, C = Value 
} 
class ExtEnum(srcEnum: Enumeration) extends Enumeration { 
    srcEnum.values.foreach(v => Value(v.id, v.toString)) 
} 
object E2 extends ExtEnum(E1) { 
    type E2 = Value 
    val D, E = Value 
} 
println(E2.values) // prints > E2.ValueSet(A, B, C, D, E) 

一個備註:這是不可能的名字使用E1值從E2:

E2.A // Can not resolve symbol A 

但是你可以打電話給他們,如:

E2(0) // A 

或者:

E2.withName(E1.A.toString) // A 
+0

我喜歡這個想法,Enum的總數是靜態類型,最終重複它們並不重要,唯一複雜的是如果您需要使用ID保存到數據庫中,則應該定義範圍以避免造成混亂... –