Scala 与';无类型/差异的显式自引用';这'';
我理解以下用途: 在body中,Scala 与';无类型/差异的显式自引用';这'';,scala,self-type,Scala,Self Type,我理解以下用途: 在body中,self是this的别名,但具有更精确的类型T和T2 现在,我在代码中看到了这一点: trait T { self => ... } 也就是说,没有附加类型信息的显式自引用。在这种配置中,是否存在self不仅仅是此的别名的情况 在这种情况下,self是表示此的另一种方式 但是,如果您碰巧有一个内部类,this内部类将是内部类,self将是容器类 这是AFAIK的唯一区别它是此的别名 您的第一个示例有助于确保trait已混合到适当的类型中,并使这些方
self
是this
的别名,但具有更精确的类型T和T2
现在,我在代码中看到了这一点:
trait T {
self =>
...
}
也就是说,没有附加类型信息的显式自引用。在这种配置中,是否存在
self
不仅仅是此
的别名的情况 在这种情况下,self
是表示此的另一种方式
但是,如果您碰巧有一个内部类,this
内部类将是内部类,self
将是容器类
这是AFAIK的唯一区别它是此的别名 您的第一个示例有助于确保trait已混合到适当的类型中,并使这些方法可用 第二个示例在具有命名冲突的内部类时非常有用,以使外部范围可见。例如:
trait U {
self =>
val name = "outer"
val b = new AnyRef {
val name = "inner"
println(name)
println(this.name)
println(self.name)
}
}
然后打印带有U的新AnyRef
inner
inner
outer
“self”不是一个特殊的关键词——你可以使用“bananas=>”或任何你喜欢的词,但它通常被惯例所使用
这在Swing中非常常见,您在内部类(滚动窗格中的文本框等)上做了很多工作,这些类通常有许多与外部类同名的方法。很好,谢谢。我想,在这种情况下,它相当于更长的形式
U.this.name
,可能还有它的用途。
inner
inner
outer