2010-11-21 10 views
12

Estoy tratando de implementar un pedido Plurk API para Scala, pero tengo una opción de diseño por hacer.¿Debo preferir la clase sellada o la enumeración en Scala?

Por ejemplo, el atributo de género de un usuario de Plurk podría ser uno de "masculino", "femenino", "otro".

sealed trait Gender 
object Male extends Gender 
object Female extends Gender 
object Others extends Gender 

La pregunta es, ¿debería preferir la clase/objeto sellado como el ejemplo del código anterior, sobre la enumeración para representar los tipos de enumeración?

Porque me parece que rara vez me encuentro con Enumeration cuando uso otra biblioteca de Scala, y muchos tutoriales de Actor usan clases/objetos sellados para representar mensajes para Actor.

¿Significa esto que en Scala, la clase sellada es una opción mejor/convencional que la Enumeración?

+0

posible duplicado de [Clases de casos frente a Enumeraciones en Scala] (http://stackoverflow.com/questions/1898932/case-classes-vs-enumerations-in-scala) –

Respuesta

11

Si no necesita repetir sus objetos de género o necesita métodos como next y previous, clases y objetos es la solución correcta.

Si necesita las características de "clases y objetos" y de "scala.Enumeration" this y this pregunta podría ser de su interés.

+0

Si necesita repetir los rasgos sellados, puede también use [this] (http://stackoverflow.com/questions/13671734/iteration-over-a-sealed-trait-in-scala) solución basada en macros – Oswaldo

9

El uso de Enumeration también es bastante más económico en términos de recuento de clases. En el ejemplo Gender que no importa, pero podría comenzar a importar si desea modelar las instrucciones del procesador mediante una enumeración con más de 100 elementos.

+2

'Enumeración' sería incluso mejor si el compilador advirtiera sobre casos faltantes como para los rasgos sellados. –

Cuestiones relacionadas