我了解用途显式键入的自引用 http://www.scala-lang.org/node/124:
trait T {
self : T2 =>
...
}
在身体里,self
是一个别名this
但有更精确的类型T with T2
.
现在,我在代码中看到了这一点:
trait T {
self =>
...
}
也就是说,没有附加类型信息的显式自引用。在这种配置下,是否存在以下情况:self
不仅仅是一个别名this
?
它是一个别名this
.
您的第一个示例对于确保特征已混合到适当的类型中很有用,并使这些方法可用。
当您的内部类存在命名冲突时,第二个示例非常有用,可以使外部作用域可见。例如:
trait U {
self =>
val name = "outer"
val b = new AnyRef {
val name = "inner"
println(name)
println(this.name)
println(self.name)
}
}
Then new AnyRef with U
prints
inner
inner
outer
“self”不是一个特殊的关键字 - 您可以使用“bananas =>”或任何您喜欢的关键字,但它经常按惯例使用。
这种情况在 Swing 中经常出现,您在内部类(滚动窗格中的文本框等)上做了很多工作,这些内部类通常有许多与外部类同名的方法。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)