Ошибка привязки параметра типа Scala в подклассе, но не в суперклассе - PullRequest
1 голос
/ 27 июля 2011

Почему не работают следующие функции?

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

1 Ответ

2 голосов
/ 27 июля 2011

this в новом Goo(this) должно быть B <: Foo[B].Это Ioo, поэтому нам нужно Ioo <: Foo[Ioo].

Ioo равно Hoo[Ioo], следовательно Foo[Hoo[Ioo]] (наследование Hoo), что не дает Foo[Ioo]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...