Las tres formas son válidas y tienen el efecto que B
se supone como el tipo de this
clase A
.
Las dos primeras variantes
trait A { self: B => ... }
trait A { foo: B => ... }
introducir self
(respectivamente,foo
) como un alias para this
en rasgo A
. Esto es útil para acceder a la this
referencia desde una clase interna. Es decir, podría usarlo en self
lugar de A.this
acceder a la this
referencia del rasgo A
desde una clase anidada en él. Ejemplo:
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 )
}
})
})
}
La tercera variante,
trait A { this: B => ... }
no introduce un alias para this
; solo establece el auto tipo.