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