如何在Scala中扩展现有的枚举对象?

时间:2011-07-15 13:20:50

标签: scala enumeration extending

我想知道你是否可以在Scala中扩展现有的枚举。例如:

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

这可以扩展如下:

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

然后,FourLeggedAnimal中的元素将是Cat,Dog和Dragon。可以这样做吗?

2 个答案:

答案 0 :(得分:3)

不,你不能这样做。 BasicAnimal之后的标识符extends不是类型,它是一个值,所以不幸的是它不会起作用。

答案 1 :(得分: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)

一句话:不可能通过名称使用E2中的E1值:

E2.A // Can not resolve symbol A

但你可以称之为:

E2(0) // A

或:

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