В чем разница между типом self `this: T =>` и `this: T`? - PullRequest
1 голос
/ 03 июля 2019

Между Scala (2.12.8) самостоятельного типа

trait T {
   this: Any =>
}

и это

trait T {
   this: Any
}

В чем разница семантики?

Другими словами, какова цель this: Any (во втором фрагменте)?

Я ожидал, что компилятор закричит, я не должен объявлять this при компиляции второго фрагмента кода, но вместо этого я получаю это предупреждение:

Warning:(2, 9) a pure expression does nothing in statement position
multiline expressions may require enclosing parentheses
    this: Any

1 Ответ

5 голосов
/ 03 июля 2019

Ключевое слово this является выражением типа T.T является подтипом Any, потому что все является подтипом Any.Следовательно, вы можете явно приписать тип Any выражению this.Допустимо иметь выражения в инициализаторе, поэтому вы можете написать выражение this: Any в теле T.

Вы могли бы также написать

trait T { 42: Int }

или

trait T { ((((this: T): T): T): T): Any }

В обоих случаях 42 и this были бы просто выражениями с явным указанием типа, которые просто ничего не делают.Они не являются декларациями и не имеют ничего общего с типом self.

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