这与自我types注释中的自我之间的区别?
在各种Scala文学中,我看到一些使用“this”的自我注释和其他使用“self”的注释:
trait A { this: B => ... } trait A { self: B => ... }
使用“this”还是“self”有什么区别? 你用什么名字重要? 这是否有效?
trait A { foo: B => ... }
所有三种forms都是有效的,并且具有B
被认为是A
类中的this
typesA
。 变种
trait A { self: B => ... } trait A { foo: B => ... }
在特征A
引入self
(分别为foo
)作为别名。 这对于从内部类访问this
引用非常有用。 也就是说,你可以使用self
而不是A.this
从嵌套在它的类访问特质A
的this
引用。 第三个变体,
trait A { this: B => ... }
不会this
引入别名; 它只是设置自我types。
有一个区别在于this
总是指最内层模板定义的对象。
expression式可以出现在模板或复合types的语句部分。 它表示由最内层的模板或复合types定义的对象,它包含引用。 如果这是一个复合types,这个types就是这个复合types。 如果它是一个具有简单名称C的类或对象定义的模板,则其types与C的types相同。
this
。 (Scala Ref。§6.5)
所以,如果你调用你的self-type foo
,你仍然可以这样引用它(当然,除非你在一个内部模板中,在这种情况下, this
将引用它所定义的对象 – 除非你不给内部模板的自我types相同的名称),但显然不是相反的方式。