2

重複の可能性:
scala の自己型と特性サブクラスの違いは何ですか?

次の 2 つのコード ブロックの違いがわかりません。

    // Trait B is mixed in and creates a dependency on it
    trait A extends C with B { 
       ...
    }

    // Trait B is put in scope and also creates a dependency on it
    trait A extends C {
       self: B =>
    ...
    }

デザインの観点からお願いします。

ありがとう!

4

1 に答える 1

4

traitセルフタイプを使用する場合、指定されたセルフタイプが混合されている他のタイプによって満たされる場合にのみ使用されるように制約します。trait定義されているセルフタイプと宣言されているセルフタイプの間に継承関係はありません。これが意味することは、特性自体は、単独の静的型として、それ自体では自己型の代わりに公に使用できるものではないということです。(これはC ++のプライベート継承に例えられていますが、弱いアナロジーです)。

于 2013-01-31T19:21:34.183 に答える