0

ケーキのパターンを理解しようとしています。

この要点を見つけました: https://gist.github.com/2127745

しかし、私はこの構文を理解していません:

// Explicit dependency on User Repository
self: UserRepositoryComponent =>

誰か説明してくれませんか?

4

3 に答える 3

4

これは、自己型注釈として知られているものです。これは、クラスのオブジェクトが宣言された型(この場合はUserRepositoryComponent、または何らかのサブタイプ)を持っていると想定できることを意味し、また(ボーナスとして)そのレベルの「this」オブジェクトを「self」として参照できるようにします、または指定したその他の名前。自己型注釈は微妙に強力です。これは、クラスの実装の要件を表します(Scalaの以前のバージョンは、構文的に「UserRepositoryComponentが必要」と表現されていました)が、実際には公開されている型の制約を意味しません(「extendsUserRepositoryComponent」と言った場合に発生します)。実装要件は、注釈付きクラスのインスタンス化で適用されますが、それ以外の場所では適用されません。自己型注釈は「

于 2013-01-08T03:13:22.867 に答える
2

これは自己型の注釈であり、たとえばhereで説明されています。self 型が与えられた場合、それはトレイト内の this の型と見なされます。RealUserServiceComponent宣言を介してTraitに、その特性self:UserRepositoryCommentを拡張するクラスにのみ適用できることを伝えUserRepositoryCommentます。

于 2013-01-08T00:42:33.270 に答える
1

これは自己型アノテーションです。これは、型を拡張できるものの仕様です。「延長」と似ていますが、反対方向です。すべてのサブタイプが UserRepositoryComponent のいくつかの実装であることを知っていると、追加のボーナスが得られます。つまり、すべてのメソッドを独自のものとして呼び出すことができます。

于 2013-01-08T08:13:19.427 に答える