Как расширить существующие перечисления объектов в Scala? - PullRequest
6 голосов
/ 15 июля 2011

Мне интересно, можете ли вы расширить уже существующие перечисления в 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 ]

3 голосов
/ 15 июля 2011

Нет, вы не можете этого сделать. Идентификатор BasicAnimal после extends не является типом, это значение, поэтому, к сожалению, оно не будет работать.

1 голос
/ 20 марта 2014

Может быть, так:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...