12

我想知道您是否可以扩展 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。这可以做到吗?

4

2 回答 2

4

不,你不能这样做。BasicAnimal后面的标识符extends不是类型,它是一个值,所以很遗憾,它不起作用。

于 2011-07-15T13:36:15.427 回答
2

可能是这样的:

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
于 2014-03-20T00:35:56.787 回答