Recherche…


Syntaxe

  • trait type {selfId => / d' autres membres peuvent se référer à selfId au cas où this signifie quelque chose /}
  • trait type {selfId: OtherType => / * les autres membres peuvent utiliser selfId et il sera de type OtherType * /
  • type de trait {selfId: OtherType1 avec OtherType2 => / * selfId est du type OtherType1 et OtherType2 * /

Remarques

Souvent utilisé avec le motif de gâteau.

Exemple simple de type auto

Les types auto peuvent être utilisés dans les traits et les classes pour définir des contraintes sur les classes concrètes auxquelles ils sont mélangés. Il est également possible d'utiliser un identifiant différent pour this utilisant cette syntaxe (utile lorsque l'objet externe doit être référencé à partir d'un objet interne).

Supposons que vous souhaitiez stocker des objets. Pour cela, vous créez des interfaces pour le stockage et pour ajouter des valeurs à un conteneur:

 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 cette manière, ceux-ci ne sont pas dans la même hiérarchie d'objet, mais PermanentStorage ne peut pas être implémenté sans implémenter également Container .



Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow