予期しない形質:私はトレイト定義さ <code>Parent</code>の簡単な代数的データ型を考えると行動
scala> sealed trait Parent
defined trait Parent
scala> case object Boy extends Parent
defined object Boy
scala> case object Girl extends Parent
defined object Girl
:次に
scala> trait HasGirl {
| val x: Girl.type
| }
defined trait HasGirl
が、私はHasGirl
を実装ケースクラスを作成しますが、x
価値を提供Boy.type
。
scala> case class Thing(x: Boy.type) extends HasGirl
defined class Thing
私はタイプBoy.type
のx
がval x: Girl.type
に準拠してどのように表示されていないので、私は、コンパイル時エラーを予想していました。
ここでは何が起こっていますか?
は 'Thing'で 'X'です形質の 'x'に関連していますか? –
さて、「Thing」は、「HasGirl」を拡張しています。後者は 'Girl.type'型の' x'型を期待しているので、 'Thing'の' x:Boy.type'は 'HasGirl'の' x'に対応しています。 –
実際、 'Thing(Boy).asInstanceOf [HasGirl] .x'は' java.lang.ClassCastException:Boy $をGirl $にキャストできません。 'を生成します。面白い。 – ale64bit