在Scala(2.12.8)自类型之间
trait T {
this: Any =>
}
还有这个
trait T {
this: Any
}
语义上有什么区别?
换句话说,this: Any
(在第二个片段中)的目的是什么?
我希望编译器大吼大叫,我在编译第二个代码片段时不应该声明this
,但是我得到了以下警告:
Warning:(2, 9) a pure expression does nothing in statement position
multiline expressions may require enclosing parentheses
this: Any
答案 0 :(得分:5)
关键字this
是类型T
的表达式。 T
是Any
的子类型,因为所有内容都是Any
的子类型。因此,您可以explicitly ascribe type Any
到表达式this
。在初始化器中包含表达式是有效的,因此可以在this: Any
的主体中编写表达式T
。
您也可能写过
trait T { 42: Int }
或
trait T { ((((this: T): T): T): T): Any }
在两种情况下,42
和this
只是具有显式类型归属的表达式,它们根本不执行任何操作。它们不是声明,与自我类型无关。