Доступ к переопределенным методам из миксина в Scala - PullRequest
4 голосов
/ 17 апреля 2011

Мне кажется, я где-то читал, что это возможно.

Вариант использования

Я хочу создать признак, который при смешивании запоминает hashCode, перезаписывая метод и сохраняя результатпереписанного метода в вал.

trait MemoHashCode {
  val hashCode = callToOverwritten_hashCode
}

1 Ответ

9 голосов
/ 17 апреля 2011

Просто используйте ключевое слово super:

trait MemoHashCode { 
  val hashCode = super.hashCode
}

Это возможно, потому что каждая черта неявно расширяет AnyRef, для которой определено hashCode.Если вы хотите использовать методы, не определенные для каждого объекта, вы должны убедиться, что эта черта может быть смешана только с объектами, для которых реализован метод, который вы собираетесь использовать.Это возможно с помощью аннотации собственного типа:

trait MemoSomethingElse { 
  this: SomeType => // SomeType has method somethingElse
  val somethingElse = super.somethingElse
}
...