Ellos no parecen mezclar muy bien:clases de casos, la coincidencia de patrones y constructores al curry en Scala
abstract class A
case class B (var a: Int)(var b: String) extends A
case class C extends A
El siguiente no funcionará:
B(1)("1") match {
case B(a)(b) => print("B")
case C() => print("C")
}
El problema es que la coincidencia de patrones y los argumentos al curry no parecen funcionar. ¿Hay una solución para esto?
Su primer ejemplo funcionaría, pero no podría acceder a B.a y B.b en la declaración de caso sin hacer una fea edición de tipos. Además, en su edición, no estoy seguro de entender por qué el patrón del constructor no está cursado. ¿Es porque no aplica? –
Para ser sincero, no tengo idea de por qué funciona. Me tropecé con el ensayo y error. Ciertamente se menciona en alguna parte en la especificación de Scala. Es posible que desee buscarlo si es relevante en su caso. – agilesteel
Sí, el patrón que utiliza en una declaración de caso es el que proporciona el resultado de la función de no aplicación. Nunca puede ser curry. La sección correspondiente en la especificación scala es §8.1.8 – Nicolas