Qual è lo schema migliore per definire il proprio tipo con la raccolta definitiva di valori?

4

Voglio definire il proprio tipo di dati, ad esempio un Digit , che avrebbe un tipo definito di valori ( 0 to 9 ) e sto cercando di definirlo in un modo pratico. Qual è il modo migliore (modello di progettazione) per farlo?

Lo sto facendo in Scala, che potrebbe fornire alcuni vantaggi, ma sono anche interessato all'approccio generale.

Se istanziando Digit tramite Int costruttore ( var d = new Digit(1) ), come gestire la sicurezza "fuori limite" in tipo compilato? La creazione di sottoclassi ( var d: Digit = new Digit1() ) è un modo?

Domanda aggiuntiva: Come gestire grandi insiemi di valori - ad es. le lettere vengono in mente prima?

    
posta David Lukac 26.03.2016 - 18:54
fonte

1 risposta

4

Questo caso specifico è facile. È possibile utilizzare i tipi di somma o le enumerazioni, poiché si dispone di un numero così piccolo di valori possibili.

In scala (digitandolo su un tablet, potrebbe risultare un po 'deformato):

sealed abstract class Digit {
  def value: Int
}

case object One extends Digit { override val value = 1 }
case object Two extends Digit { override val value = 2 }

// ...

Potresti voler renderlo più piacevole con un metodo non correttamente appropriato nell'oggetto companion e altre chicche.

Per quanto riguarda la costruzione, non è necessario: tutti i valori sono già presenti, non è necessario crearne uno nuovo.

Questo è solo pratico perché hai dieci valori. Un numero maggiore richiederebbe una risposta completamente diversa.

    
risposta data 26.03.2016 - 19:38
fonte

Leggi altre domande sui tag