Scala Language Estrattori Case Class


Esempio

Una classe di casi è una classe con un codice standard di codice standard che è incluso automaticamente. Un vantaggio di questo è che Scala semplifica l'uso di estrattori con classi di casi.

case class Person(name: String, age: Int)  // Define the case class
val p = Person("Paola", 42)  // Instantiate a value with the case class type

val Person(n, a) = p  // Extract values n and a
// n: String = Paola
// a: Int = 42

In questo frangente, sia n che a sono val nel programma e sono accessibili come tali: si dice che siano stati "estratti" da p. continuando:

val p2 = Person("Angela", 1337)

val List(Person(n1, a1), Person(_, a2)) = List(p, p2)
// n1: String = Paola
// a1: Int = 42
// a2: Int = 1337

Qui vediamo due cose importanti:

  • L'estrazione può avvenire a livelli "profondi": è possibile estrarre le proprietà degli oggetti nidificati.
  • Non tutti gli elementi devono essere estratti. Il jolly _ carattere indica che quel particolare valore può essere qualsiasi cosa, e viene ignorato. Nessun val è stato creato.

In particolare, questo può semplificare la corrispondenza tra le raccolte:

val ls = List(p1, p2, p3)  // List of Person objects
ls.map(person => person match {
  case Person(n, a) => println("%s is %d years old".format(n, a))
})

Qui, abbiamo un codice che usa l'extractor per verificare esplicitamente che la person sia un oggetto Person e immediatamente estrae le variabili che ci interessano: n e a .