サーチ…


構文

  • 形質タイプ{selfId => / 他のメンバーは、参照することができselfId場合this何か / 手段 }
  • trait Type {selfId:OtherType => / *他のメンバーはselfIdを使用することができ、 OtherType * /
  • traitタイプ{selfId:OtherType1とOtherType2 => / * selfIdOtherType1OtherType2タイプ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.
   }
 }

このように、これらは同じオブジェクト階層にはありませんが、 Container実装することなくPermanentStorageを実装することはできません。



Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow