Answers:
所有这三种形式都是有效的,并且具有B
假定为this
in类中的类型的效果A
。
前两个变体
trait A { self: B => ... }
trait A { foo: B => ... }
在trait中引入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 )
}
})
})
}
第三种变体
trait A { this: B => ... }
不引入别名this
; 它只是设置自我类型。
trait A { self: B, C => ... }
?
with
在自键入批注中使用关键字。例如trait A { self: B with C => ... }
_: B =>
为简单起见而对非别名情况进行处理