Assumi la seguente funzione:
def fMatch(s: String) = {
s match {
case "a" => println("It was a")
case _ => println("It was something else")
}
}
Questo modello corrisponde bene:
scala> fMatch("a")
It was a
scala> fMatch("b")
It was something else
Quello che vorrei poter fare è quanto segue:
def mMatch(s: String) = {
val target: String = "a"
s match {
case target => println("It was" + target)
case _ => println("It was something else")
}
}
Questo emette il seguente errore:
fMatch: (s: String)Unit
<console>:12: error: unreachable code
case _ => println("It was something else")
Immagino che questo sia perché pensa che l'obiettivo sia in realtà un nome che vorresti assegnare a qualunque sia l'input. Due domande:
Perché questo comportamento? Non è possibile cercare solo le variabili esistenti nell'ambito che hanno un tipo appropriato e utilizzare prima quelle e, se non ne viene trovata nessuna, trattare l'obiettivo come un nome su cui eseguire il patternmatch?
C'è una soluzione alternativa per questo? Qualche modo per trovare un pattern match contro le variabili? Alla fine si potrebbe usare un'istruzione if grande, ma le maiuscole sono più eleganti.