Что я могу написать после стрелки самостоятельной ссылки?

#scala #traits #self-reference

#scala #Трейты #самоссылка

Вопрос:

Я понимаю, каков результат selfтипа, как в

 trait SpellChecker {
  self: RandomAccessSeq[char] =>
  ...
}
  

из http://www.markthomas.info/blog/92

Насколько я понимаю, в нем говорится: «объект, созданный на основе этого признака, также имеет тип RandomAccessSeq[char] «. Это правильно?

Мой вопрос: что я могу написать после => и что это значит? Я заметил, что я не получаю ошибку компилятора при записи AnyRef после => .

Ответ №1:

Мой вопрос: что я могу написать после =>

Что угодно.

и что это значит?

Это обозначает конец аннотации собственного типа. После этого появляется обычное тело признака, точно так же, как если бы аннотации self-type даже не было.

Ответ №2:

 trait A { ta: B =>
  // code
}
  

В этом примере ta это this псевдоним. Это полезно в качестве сокращения для A.this , когда вам нужно ссылаться на этот код откуда-то еще.

Поскольку ta (т. Е. Этот код) имеет тип B , все B методы и данные-члены находятся в области видимости и свободно доступны. Это становится контрактом, который компилятор будет применять: поскольку A код может ссылаться B на код, A он не может быть создан без B также в миксе.