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)

1 つの注意: E2 の E1 値を名前で使用することはできません。

E2.A // Can not resolve symbol A

ただし、次のように呼び出すことができます。

E2(0) // A

また:

E2.withName(E1.A.toString) // A
于 2014-03-20T00:35:56.787 に答える