Kapalı yazım, Left("aoeu")
'un Left[String,Nothing]
olduğu sonucuna varılır. Açıkça yazmanız gerekiyor.
(Left("aoeu"): Either[String,String]) match{case Right(x) => ; case Left(x) => }
Model eşleştirme adaylarının her zaman eşleşen değere uyan türde olması gerekir.
scala> case class X(a: String)
defined class X
scala> case class Y(a: String)
defined class Y
scala> X("hi") match {
| case Y("hi") => ;
| case X("hi") => ;
| }
<console>:11: error: constructor cannot be instantiated to expected type;
found : Y
required: X
case Y("hi") => ;
^
Neden böyle davranıyor? Uyumsuz bir tipte eşleşmeye çalışmak için iyi bir neden olmadığını sanıyorum. Bunu yapmaya teşebbüs etmek, geliştiricinin gerçekten neyi amaçladığını yazmadığının bir işaretidir. Derleyici hatası, hataları önlemeye yardımcı olur.
Derleyici, kodunuzun bazılarının ulaşılamayacağını size söylüyor. Bu iyi bir şey mi, evet? –