Tất cả ba hình thức là hợp lệ và có hiệu lực B
được coi là loại this
trong lớp A
.
Hai biến thể đầu tiên
trait A { self: B => ... }
trait A { foo: B => ... }
giới thiệu self
(tương ứng, foo
) như một bí danh cho this
đặc điểm A
. Điều này rất hữu ích để truy cập this
tài liệu tham khảo từ một lớp bên trong. Tức là sau đó bạn có thể sử dụng self
thay vì A.this
khi truy cập this
tham chiếu của đặc điểm A
từ một lớp được lồng trong nó. Thí dụ:
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 )
}
})
})
}
Biến thể thứ ba,
trait A { this: B => ... }
không giới thiệu một bí danh cho this
; nó chỉ đặt kiểu tự.