Estoy haciendo coincidir con algunas clases de casos y me gustaría manejar dos de los casos de la misma manera. Algo como esto:Coincide con múltiples clases de casos en scala
abstract class Foo
case class A extends Foo
case class B(s:String) extends Foo
case class C(s:String) extends Foo
def matcher(l: Foo): String = {
l match {
case A() => "A"
case B(sb) | C(sc) => "B"
case _ => "default"
}
}
Pero cuando hago esto me sale el error:
(fragment of test.scala):10: error: illegal variable in pattern alternative
case B(sb) | C(sc) => "B"
puedo conseguir que funcione de que quitar los parámetros de la definición de B y C, pero ¿cómo se puede hacer coincidir con los params?
Aunque mi ejemplo no lo muestra, necesito esos parámetros. Parece que tendré que usar un objeto. ¡Gracias! – timdisney
¿Existe algún motivo por el que Scala no permita "caso A (aString) | caso B (aString) => println (aString)"? Parece que siempre y cuando el tipo de cadena a sea idéntico tanto para A como para B, debería permitirse. Su último ejemplo parece que sería mejor no duplicar los casos B y C. –
Te llevaré uno más. Creo que sería bueno tener 'caso A (x) | B (x) => println (x) 'se permite donde el tipo de' x' se establece en el límite superior en el sistema de tipos de lo que producen A (x) y B (x). –