2011-07-15 21 views
6

Me pregunto si puede extender enumeraciones ya existentes en Scala. Por ejemplo:¿Cómo extender objetos de enumeraciones existentes en Scala?

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

se puede extender este algo como esto:

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

A continuación, los elementos en FourLeggedAnimal serían gato, perro y dragón. Se puede hacer esto?

Respuesta

3

No, no puedes hacer esto. El identificador BasicAnimal después de extends no es un tipo, es un valor, por lo que no funcionará, desafortunadamente.

+0

Oh, veo el error de mis maneras. He agregado una nueva respuesta, por lo que puedo escribir el código correctamente. – Henry

+0

No me deja publicar debido a su reputación. Básicamente, puede definir los objetos como clases abstractas y extenderlos, luego crear instancias de objetos que extienden directamente las clases correspondientes. – Henry

+0

Aquí está el código: http://codepaste.net/24vfhv Disculpe las molestias. – Henry

1

Puede ser que es la forma:

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) 

Una observación: no es posible utilizar los valores E1 de E2 por nombre:

E2.A // Can not resolve symbol A 

Pero puede llamar a ellos como:

E2(0) // A 

o:

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

Me gusta esta idea, total es para Enum que son tipos estáticos, no importa que termine repitiéndolos, lo único complicado sería si necesita usar el ID para guardar en la base de datos, debe definir rangos para evitar creando confusión ... –

Cuestiones relacionadas