Buscar..


Sintaxis

  • Tipo de rasgo {selfId => / otros miembros pueden referirse a selfId en caso de que this signifique algo /}
  • Tipo de rasgo {selfId: OtherType => / * otros miembros pueden usar selfId y será del tipo OtherType * /
  • Tipo de rasgo {selfId: OtherType1 with OtherType2 => / * selfId es de tipo OtherType1 y OtherType2 * /

Observaciones

A menudo se utiliza con el patrón de pastel.

Ejemplo de auto tipo simple

Los auto tipos se pueden usar en rasgos y clases para definir restricciones en las clases concretas a las que se mezcla. También es posible utilizar un identificador diferente para la this usando esta sintaxis (útil cuando el objeto externo tiene que ser referenciado a partir de un objeto interno).

Supongamos que desea almacenar algunos objetos. Para eso, crea interfaces para el almacenamiento y para agregar valores a un contenedor:

 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.
   }
 }

De esta manera, no están en la misma jerarquía de objetos, pero PermanentStorage no se puede implementar sin implementar también Container .



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow