我想知道你是否可以在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。可以这样做吗?
答案 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