Las tres formas son válidas y tienen el efecto que Bse supone como el tipo de thisclase A.
Las dos primeras variantes
trait A { self: B => ... }
trait A { foo: B => ... }
introducir self(respectivamente,foo ) como un alias para thisen rasgo A. Esto es útil para acceder a la thisreferencia desde una clase interna. Es decir, podría usarlo en selflugar de A.thisacceder a la thisreferencia del rasgo Adesde 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.