English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Gli estrattori estraggono i parametri dallo oggetto passato a loro.
La libreria standard Scala contiene alcuni estrattori predefiniti, ne parleremo brevemente.
L'estrattore Scala è un oggetto che contiene il metodo unapply. Il metodo unapply è considerato l'operazione inversa dell'apply: unapply accetta un oggetto, quindi estrae i valori dall'oggetto, i valori estratti sono solitamente usati per costruire il valore dell'oggetto.
Ecco un esempio che dimostra l'oggetto estrattore di indirizzi email:
object Test { def main(args: Array[String]) { println("Metodo Apply: " + apply("Zara", "gmail.com")); println("Metodo Unapply: " + unapply("[email protected]")); println("Metodo Unapply: " + unapply("Zara Ali")); } // Metodi di iniezione (opzionali) def apply(user: String, domain: String) = { user +"@"+ domain } // Metodi di estrazione (obbligatori) def unapply(str: String): Option[(String, String)] = { val parts = str split "@" if (parts.length == 2){ Some(parts(0), parts(1)) else{ None } } }
Esegui il codice sopra, il risultato sarà:
$ scalac Test.scala $ scala Test Metodo Apply: [email protected] Metodo Unapply: Some((Zara,gmail.com)) Metodo Unapply: None
Gli oggetti di seguito definiscono due metodi: apply e unapply metodo. Tramite il metodo apply, non è necessario utilizzare l'operazione new per creare oggetti. Quindi puoi costruire una stringa "[email protected]" utilizzando la frase Test("Zara", "gmail.com").
L'unapply è considerato l'operazione inversa dell'apply: unapply accetta un oggetto, quindi estrae i valori dall'oggetto, i valori estratti sono solitamente usati per costruire il valore dell'oggetto. Nell'esempio, usiamo Il metodo unapply estrae il nome utente e l'appendice dell'indirizzo email dall'oggetto.
Nel esempio, il metodo unapply restituisce None quando la stringa passata non è un indirizzo email. Ecco un esempio di codice:
unapply("[email protected]") è uguale a Some("Zara", "gmail.com") unapply("Zara Ali") è uguale a None
Quando definiamo un'istanza di una classe, possiamo passare 0 o più parametri, il compilatore chiama il metodo apply durante la definizione dell'istanza. Possiamo definire il metodo apply sia in una classe che in un oggetto.
Come abbiamo menzionato in precedenza, unapply viene utilizzato per estrarre il valore specificato, il che è l'opposto dell'operazione di apply. Quando usiamo l'espressione match in un oggetto estrattore, unapply viene eseguito automaticamente, come mostrato di seguito:
object Test { def main(args: Array[String]) { val x = Test(5) println(x) x match { case Test(num) => println(x + " è " + num + " del doppio!") // unapply chiamato case _ => println("Impossibile calcolare") } } def apply(x: Int) = x * 2 def unapply(z: Int): Option[Int] = if (z % 2 == 0) Some(z / 2) else None }
Esegui il codice sopra, il risultato sarà:
$ scalac Test.scala $ scala Test 10 10 è il doppio di 5!