我理解自我类型的结果是什么,如
trait SpellChecker {
self: RandomAccessSeq[char] =>
...
}
来自http://www.markthomas.info/blog/92
但我不明白为什么在这里使用self
代替this
更好......!另外,如果我写asfd
而不是self
我也没有收到编译错误...所以我不太确定" self"就是这样。我不知道以后可以在特征的某个方法中像对象一样使用self
。
答案 0 :(得分:3)
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 =>
表示“我不需要别名,我只想确保将其与示例”混合使用。您可以为自己的别名命名,但asfd
与iLikeFries
一样好。 self
只是一种惯例。
答案 1 :(得分:1)
在这种特殊情况下,重命名this
是没有意义的。在嵌套的情况下,当您重命名外部this
并在嵌套的模板/对象中访问它时,它更有意义。