Scala 与';无类型/差异的显式自引用';这'';

Scala 与';无类型/差异的显式自引用';这'';,scala,self-type,Scala,Self Type,我理解以下用途: 在body中,self是this的别名,但具有更精确的类型T和T2 现在,我在代码中看到了这一点: trait T { self => ... } 也就是说,没有附加类型信息的显式自引用。在这种配置中,是否存在self不仅仅是此的别名的情况 在这种情况下,self是表示此的另一种方式 但是,如果您碰巧有一个内部类,this内部类将是内部类,self将是容器类 这是AFAIK的唯一区别它是此的别名 您的第一个示例有助于确保trait已混合到适当的类型中,并使这些方

我理解以下用途:

在body中,
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