Toma la siguiente función:
def fMatch(s: String) = {
s match {
case "a" => println("It was a")
case _ => println("It was something else")
}
}
Este patrón combina muy bien:
scala> fMatch("a")
It was a
scala> fMatch("b")
It was something else
Lo que me gustaría poder hacer es lo siguiente:
def mMatch(s: String) = {
val target: String = "a"
s match {
case target => println("It was" + target)
case _ => println("It was something else")
}
}
Esto emite el siguiente error:
fMatch: (s: String)Unit
<console>:12: error: unreachable code
case _ => println("It was something else")
Supongo que esto se debe a que cree que target es en realidad un nombre que le gustaría asignar a cualquier entrada. Dos preguntas:
¿Por qué este comportamiento? ¿No puede el caso simplemente buscar las variables existentes en el alcance que tengan el tipo apropiado y usarlas primero y, si no se encuentra ninguna, luego tratar el objetivo como un nombre para hacer coincidir el patrón?
¿Hay una solución para esto? ¿Alguna forma de hacer coincidir el patrón con las variables? En última instancia, uno podría usar una gran declaración if, pero el caso de coincidencia es más elegante.