Prenez la fonction suivante:
def fMatch(s: String) = {
s match {
case "a" => println("It was a")
case _ => println("It was something else")
}
}
Ce modèle correspond bien:
scala> fMatch("a")
It was a
scala> fMatch("b")
It was something else
Ce que j'aimerais pouvoir faire, c'est ce qui suit:
def mMatch(s: String) = {
val target: String = "a"
s match {
case target => println("It was" + target)
case _ => println("It was something else")
}
}
Cela donne l'erreur suivante:
fMatch: (s: String)Unit
<console>:12: error: unreachable code
case _ => println("It was something else")
Je suppose que c'est parce qu'il pense que la cible est en fait un nom que vous aimeriez attribuer à quelle que soit l'entrée. Deux questions:
Pourquoi ce comportement? Vous ne pouvez pas simplement rechercher des variables existantes dans la portée qui ont un type approprié et les utiliser en premier et, si aucune n'est trouvée, traiter la cible comme un nom à mettre en correspondance?
Y a-t-il une solution de contournement pour cela? Existe-t-il un moyen de faire correspondre les modèles aux variables? En fin de compte, on pourrait utiliser une grande instruction if, mais la casse de correspondance est plus élégante.