さまざまな Scala 文献で、"this" を使用する自己型注釈と "self" を使用する自己型注釈が見られます。
trait A { this: B => ... }
trait A { self: B => ... }
「this」と「self」の使用には実際の違いがありますか? 使用する名前は重要ですか? どちらも同じくらい有効ですか?
trait A { foo: B => ... }
ベストアンサー1
これら 3 つの形式はすべて有効であり、クラスのB
の型として想定される効果があります。this
A
最初の2つの変種
trait A { self: B => ... }
trait A { foo: B => ... }
self
(それぞれ、 )をトレイトfoo
のエイリアスとして導入します。これは、内部クラスから参照にアクセスする場合に便利です。つまり、トレイトの参照にその内部にネストされたクラスからアクセスするときに、代わりに を使用できます。例:this
A
this
self
A.this
this
A
class MyFrame extends JFrame { frame =>
getContentPane().add( new JButton( "Hide" ) {
addActionListener( new ActionListener {
def actionPerformed( e: ActionEvent ) {
// this.setVisible( false ) --> shadowed by JButton!
frame.setVisible( false )
}
})
})
}
3番目の変種、
trait A { this: B => ... }
のエイリアスを導入するのではなくthis
、単に self 型を設定します。