为什么在自我引用中使用 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"。您可以随心所欲地命名您的别名 asfd
和 iLikeFries
一样好。 self
只是有点约定俗成。
我明白自我类型的结果是什么
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"。您可以随心所欲地命名您的别名 asfd
和 iLikeFries
一样好。 self
只是有点约定俗成。