Поиск…


Синтаксис

  • trait Type {selfId => / другие члены могут ссылаться на selfId если this означает что-то /}
  • trait Type {selfId: OtherType => / * другие члены могут использовать selfId и будут иметь тип OtherType * /
  • trait Type {selfId: OtherType1 with OtherType2 => / * selfId имеет тип OtherType1 и OtherType2 * /

замечания

Часто используется с рисунком пирога.

Пример простого типа

Типы типов могут использоваться в свойствах и классах для определения ограничений на конкретные классы, к которым он смешивается. Также можно использовать другой идентификатор для this используя этот синтаксис (полезно, когда внешний объект должен ссылаться от внутреннего объекта).

Предположим, вы хотите сохранить некоторые объекты. Для этого вы создаете интерфейсы для хранилища и добавляете значения в контейнер:

 trait Container[+T] {
   def add(o: T): Unit
 }

 trait PermanentStorage[T] {
   /* Constraint on self type: it should be Container
    * we can refer to that type as `identifier`, usually `this` or `self`
    * or the type's name is used. */
   identifier: Container[T] =>

   def save(o: T): Unit = {
     identifier.add(o)
     //Do something to persist too.
   }
 }

Таким образом, они не находятся в одной иерархии объектов, но PermanentStorage не может быть реализован без реализации Container .



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow