Lou*_*bel 1 syntax scala self-type
在Scala(2.12.8)之间进行自我类型
trait T {
this: Any =>
}
Run Code Online (Sandbox Code Playgroud)
和这个
trait T {
this: Any
}
Run Code Online (Sandbox Code Playgroud)
语义上有什么区别?
换句话说,this: Any(在第二段中)的目的是什么?
我希望编译器大吼大叫,我this在编译第二个代码片段时不应该声明,但是我得到了这个警告:
Warning:(2, 9) a pure expression does nothing in statement position
multiline expressions may require enclosing parentheses
this: Any
Run Code Online (Sandbox Code Playgroud)
关键字this是type的表达式T。T是的子类型Any,因为一切都是的子类型Any。因此,您可以将类型明确地归因 Any于表达式this。它是有效的在初始化表达式,所以你可以写表达this: Any中的身体T。
您可能还写了
trait T { 42: Int }
Run Code Online (Sandbox Code Playgroud)
要么
trait T { ((((this: T): T): T): T): Any }
Run Code Online (Sandbox Code Playgroud)
在这两种情况下,42并且this仅仅是具有显式类型归属的表达式,它们什么都不做。它们不是声明,与自我类型无关。