Дважды смешать в черту в объект пакета - PullRequest
6 голосов
/ 11 октября 2011

Пока все работает как положено:

trait A
trait B extends A
object C extends A with B

Следующие выходы illegal cyclic reference involving trait B:

package cyclictest {
  trait A
  trait B extends A
}
package object cyclictest extends A with B

Что там происходит?

1 Ответ

2 голосов
/ 21 ноября 2011

Ошибка правильная. Компилятор разрешает имена A и B в полные имена, поэтому средство проверки типов видит:

package object cyclictest extends cyclictest.A with cyclictest.B

Чтобы проверить правильность определения объекта пакета, компилятору необходимо знать все члены A и B, но для того, чтобы узнать это, он должен знать члены cyclictest ( поскольку A и B являются членами cyclictest). Однако это происходит при определении циклического теста , поэтому у вас есть цикл, который не может быть разрешен.

Первый случай проходит, потому что пакет cyclictest ничего не наследует, это пакет по умолчанию для каталога.

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