暗黙の型指定は、Left("aoeu")
がLeft[String,Nothing]
であると推定しています。明示的に入力する必要があります。
(Left("aoeu"): Either[String,String]) match{case Right(x) => ; case Left(x) => }
パターンマッチング候補は、常に一致する値に一致するタイプである必要があります。
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") => ;
^
なぜこのように動作しますか?私は、互換性のない型にマッチさせようとする正当な理由はないと思う。そうしようとするのは、開発者が本当に意図していることを書いていないという兆候です。コンパイラエラーは、バグを防ぐのに役立ちます。
あなたのコードの一部が到達不能であることをコンパイラから伝えています。それはいいことです、はい? –