为什么在自我引用中使用 self 而不是 this ?

Why self instead of this in self reference?

我明白自我类型的结果是什么

trait SpellChecker {
  self: RandomAccessSeq[char] =>
  ...
}

来自 http://www.markthomas.info/blog/92

但我不明白为什么在这里使用 self 而不是 this 更好...!?另外,如果我写 asfd 而不是 self 我也不会收到编译器错误...所以我不太确定 "self" 是什么。我没有看到可以在稍后的特征方法之一中像对象一样使用 self

在这种特殊情况下,重命名 this 没有任何意义。在嵌套的情况下更有意义,当您重命名外部 this 并在嵌套的模板/对象中访问它时。

self 是您的 SpellChecker 实例的别名。如果您有嵌套结构(如 类),这将很有用。考虑一下:

trait Foo {
  self =>

  override def toString : String = "Foo here"

  class Bar {
    def print() : Unit = {
      println(s"this = $this")
      println(s"self = $self")
    }
    override def toString : String = "Bar here"
  }
}

val foo = new Foo {}
val bar = new foo.Bar()
bar.print()

输出:

this = Bar here 
self = Foo here

所以如果你想引用外部元素,你可以使用你的别名。使用 this 表示没有别名,因此 this : Example => 表示 "I dont need an alias for this, I just want to make sure this is mixed with Example"。您可以随心所欲地命名您的别名 asfdiLikeFries 一样好。 self 只是有点约定俗成。