2010-11-21 11 views
12

Sto tentando di implementare un binario Plurk API per Scala, ma ho una scelta di progettazione da fare.Dovrei preferire la classe sealed o Enumeration in Scala?

Ad esempio, l'attributo gender di un utente Plurk potrebbe essere uno di "male", "femmina", "altro".

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

La domanda è: dovrei preferire sigillato classe/oggetto come esempio di codice di cui sopra, oltre Enumeration per rappresentare i tipi di enumerazione?

Perché trovo che raramente mi imbatto in Enumerazione quando uso un'altra libreria di Scala e molti tutorial di Actor usano la classe/oggetto sigillato per rappresentare i messaggi per l'attore.

Questo significa che in Scala, la classe sigillata è una scelta migliore/convenzionale rispetto all'enumerazione?

+0

possibile duplicato di [classi caso contro enumerazioni in scala] (http://stackoverflow.com/questions/1898932/case-classes-vs-enumerations-in-scala) –

risposta

11

Se non è necessario scorrere gli oggetti di Gender o sono necessari metodi come next e previous, le classi e gli oggetti sono la soluzione giusta.

Se avete bisogno delle caratteristiche delle "classi e oggetti" e di "scala.Enumeration" this e this la domanda potrebbe interessarvi.

+0

Se è necessario iterare su tratti sigillati è possibile usa anche [this] (http://stackoverflow.com/questions/13671734/iteration-over-a-sealed-trait-in-scala) soluzione basata su macro – Oswaldo

9

L'utilizzo di Enumeration è anche un po 'più economico in termini di conteggio delle classi. Nell'esempio Gender non importa, ma potrebbe iniziare a importare se si desidera modellare le istruzioni del processore mediante un'enumerazione con oltre 100 elementi.

+2

'Enumerazione' sarebbe ancora più bella se il compilatore ti avvisasse di casi mancanti come per i tratti sigillati. –

Problemi correlati