Szukaj…


Składnia

  • trait Type {selfId => / inni członkowie mogą odnosić się do selfId na wypadek, gdyby this coś oznaczało /}
  • cecha Type {selfId: OtherType => / * inni członkowie mogą korzystać z selfId i będzie to typ OtherType * /
  • cecha Type {selfId: OtherType1 with OtherType2 => / * selfId jest typu OtherType1 i OtherType2 * /

Uwagi

Często używany z wzorem ciasta.

Prosty przykład typu własnego

Typy własne mogą być używane w cechach i klasach do definiowania ograniczeń konkretnych klas, z którymi jest mieszany. Jest również możliwe zastosowanie innego identyfikatora dla this za pomocą tego składni (przydatna, gdy zewnętrzny obiekt musi być określany z wewnętrznej obiektu).

Załóżmy, że chcesz przechowywać niektóre obiekty. W tym celu tworzysz interfejsy dla magazynu i dodajesz wartości do kontenera:

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

W ten sposób nie są one w tej samej hierarchii obiektów, ale PermanentStorage nie może zostać zaimplementowany bez implementacji Container .



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow