Scala Language
Самостоятельные типы
Поиск…
Синтаксис
- 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