可能重复:
scala 自类型和特征子类之间有什么区别?
我将自注释理解为对编译器的承诺,程序员表明一个特征将与带注释的特征混合。例如:
scala> trait X
defined trait X
scala> trait Y { this: X => }
defined trait Y
scala> new Y {}
<console>:10: error: illegal inheritance;
self-type Y does not conform to Y's selftype Y with X
new Y {}
^
scala> new Y with X {}
res1: Y with X = $anon$1@1125a40
在前面的示例中,第三个表达式失败,因为我们没有为新实例设置有效的 X。显然,最后一个效果很好。到现在为止还挺好。现在,让我们看另一个涉及对象的示例。
scala> object Z { this: X => }
defined module Z
我知道该对象正在实例化失败,并带有 X 承诺(我们现在正在创建一个带有未来承诺的实例!),如下几行所示,其中的特征已稍作修改:
scala> trait X { class X1 }
defined trait X
scala> trait Y { this: X => new X1 }
defined trait Y
scala> object Z { this: X => new X1 }
<console>:8: error: not found: type X1
object Z { this: X => new X1 }
^
那么,对象自注释意味着什么?