2011-07-27 15 views
1

なぜ次のように動作しないのですか?新しいGoo(this)サブクラスでスカラ型パラメータにバインドされたエラーが発生しましたが、スーパークラスではありません

scala> class Foo[B<:Foo[B]] 
defined class Foo 

scala> class Goo[B<:Foo[B]](x: B) 
defined class Goo 

scala> class Hoo[B<:Hoo[B]] extends Foo[Hoo[B]] { def f = new Goo(this) } 
defined class Hoo 

scala> class Ioo extends Hoo[Ioo] { def g = new Goo(this) } 
<console>:11: error: inferred type arguments [Ioo] do not conform to class Goo's type parameter bounds [B <: Foo[B]] 
     class Ioo extends Hoo[Ioo] { def g = new Goo(this) } 
              ^

scala> class Ioo extends Hoo[Ioo] { f } // yet this works! 
defined class Ioo 

答えて

2

thisB <: Foo[B]でなければなりません。それはIooなので、​​が必要です。

IooFoo[Ioo]を与えない、従ってFoo[Hoo[Ioo]]Hooの継承)、Hoo[Ioo]あります。

関連する問題