Почему не работают следующие функции?
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
this в новом Goo(this) должно быть B <: Foo[B].Это Ioo, поэтому нам нужно Ioo <: Foo[Ioo].
this
Goo(this)
B <: Foo[B]
Ioo <: Foo[Ioo]
Ioo равно Hoo[Ioo], следовательно Foo[Hoo[Ioo]] (наследование Hoo), что не дает Foo[Ioo]
Ioo
Hoo[Ioo]
Foo[Hoo[Ioo]]
Hoo
Foo[Ioo]