Отношения между этим и этим. Тип - PullRequest
2 голосов
/ 05 августа 2011

Следующее:

trait Foo {
    type T
    val foo: T
}

trait Bar extends Foo {
    type T = this.type
    val foo = this
}

выдает ошибку компилятора:

<console>:8: error: overriding value foo in trait Foo of type Bar.this.T;
 value foo has incompatible type
        val foo = this
            ^

Однако, если я изменю последнюю строку на:

val foo: this.type = this

, она компилируетсябез ошибок.

Почему я должен здесь явно указывать тип?Я уже говорил, что тип foo должен быть T, а T должен быть this.type.Тип this не this.type?

1 Ответ

6 голосов
/ 05 августа 2011

Компилятор Scala никогда автоматически не определяет одноэлементные типы, такие как this.type. Они как-то «слишком специфичны» и могут привести к странному поведению в других, более распространенных ситуациях.

По той же теме смотрите также:

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