Scala Language Match Pattern semplice


Esempio

Questo esempio mostra come abbinare un input a più valori:

def f(x: Int): String = x match {
  case 1 => "One"
  case 2 => "Two"
  case _ => "Unknown!"
}

f(2)  // "Two"
f(3)  // "Unknown!"

Dimostrazione dal vivo

Nota: _ è la caduta attraverso o caso di default, ma non è necessario.

def g(x: Int): String = x match {
  case 1 => "One"
  case 2 => "Two"
}

g(1)  // "One"
g(3)  // throws a MatchError

Per evitare di lanciare un'eccezione, qui è la migliore pratica di programmazione funzionale per gestire il caso predefinito ( case _ => <do something> ). Si noti che la corrispondenza su una classe di case può aiutare il compilatore a produrre un avvertimento se manca un caso. Lo stesso vale per i tipi definiti dall'utente che estendono un tratto sigillato. Se la corrispondenza è totale, potrebbe non essere necessario un caso predefinito

È anche possibile confrontarsi con valori che non sono definiti in linea. Questi devono essere identificatori stabili , che si ottengono usando un nome in maiuscolo o racchiudendo i backtick.

Con One e two definiti da qualche altra parte o passati come parametri di funzione:

val One: Int = 1
val two: Int = 2

Possono essere abbinati nel modo seguente:

def g(x: Int): String = x match {
  case One => "One"
  case `two` => "Two"
}

A differenza di altri linguaggi di programmazione come Java, ad esempio, non vi è alcuna caduta. Se un blocco di casi corrisponde a un input, viene eseguito e la corrispondenza è finita. Pertanto il caso meno specifico dovrebbe essere l'ultimo blocco del caso.

def f(x: Int): String = x match {
  case _ => "Default"
  case 1 => "One"
}

f(5) // "Default"
f(1) // "Default"