#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
также в миксе.