non sembrano mescolare molto bene:caso, il pattern matching e costruttori al curry a Scala
abstract class A
case class B (var a: Int)(var b: String) extends A
case class C extends A
Quanto segue non funziona:
B(1)("1") match {
case B(a)(b) => print("B")
case C() => print("C")
}
Il problema è che il pattern matching e gli argomenti al curry non sembrano funzionare. C'è un work-around per questo?
Il tuo primo esempio funzionerebbe, ma non sarei in grado di accedere a B.a e B.b nell'istruzione case senza fare un brutto typecasting. Inoltre, nella tua modifica, non sono sicuro di capire perché il modello di costruzione non è al curry. È perché inapplicato? –
A dire il vero non ho idea del perché funzioni. Sono inciampato su di esso attraverso prove ed errori. È certamente menzionato da qualche parte nelle specifiche di Scala. Potresti voler controllare se è pertinente nel tuo caso. – agilesteel
Sì, lo schema che si utilizza in un'istruzione case è quello fornito dal risultato della funzione non valida. Non può mai essere curato. La sezione corrispondente nella scala specifica è il §8.1.8 – Nicolas