ケーキのパターンを理解しようとしています。
この要点を見つけました: https://gist.github.com/2127745
しかし、私はこの構文を理解していません:
// Explicit dependency on User Repository
self: UserRepositoryComponent =>
誰か説明してくれませんか?
ケーキのパターンを理解しようとしています。
この要点を見つけました: https://gist.github.com/2127745
しかし、私はこの構文を理解していません:
// Explicit dependency on User Repository
self: UserRepositoryComponent =>
誰か説明してくれませんか?
これは、自己型注釈として知られているものです。これは、クラスのオブジェクトが宣言された型(この場合はUserRepositoryComponent、または何らかのサブタイプ)を持っていると想定できることを意味し、また(ボーナスとして)そのレベルの「this」オブジェクトを「self」として参照できるようにします、または指定したその他の名前。自己型注釈は微妙に強力です。これは、クラスの実装の要件を表します(Scalaの以前のバージョンは、構文的に「UserRepositoryComponentが必要」と表現されていました)が、実際には公開されている型の制約を意味しません(「extendsUserRepositoryComponent」と言った場合に発生します)。実装要件は、注釈付きクラスのインスタンス化で適用されますが、それ以外の場所では適用されません。自己型注釈は「
これは自己型の注釈であり、たとえばhereで説明されています。self 型が与えられた場合、それはトレイト内の this の型と見なされます。RealUserServiceComponent
宣言を介してTraitに、その特性self:UserRepositoryComment
を拡張するクラスにのみ適用できることを伝えUserRepositoryComment
ます。
これは自己型アノテーションです。これは、型を拡張できるものの仕様です。「延長」と似ていますが、反対方向です。すべてのサブタイプが UserRepositoryComponent のいくつかの実装であることを知っていると、追加のボーナスが得られます。つまり、すべてのメソッドを独自のものとして呼び出すことができます。