2011-07-15 40 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保存到数据库中,则应该定义范围以避免造成混乱... –