Scala Mixin特征错误



以下代码段:

scala> trait User { def name: String }
defined trait User
scala> trait Tweeter {
     | user: User =>
     | def tweet(msg: String) = println(s"$name: $msg")
     | }
defined trait Tweeter
scala> trait Correct extends Tweeter with User { }
defined trait Correct
scala> trait Wrong extends Tweeter
<console>:9: error: illegal inheritance;
 self-type Wrong does not conform to Tweeter's selftype Tweeter with User
       trait Wrong extends Tweeter
                           ^
scala>

高音扬声器has-a用户,那么为什么在扩展高音扬声器时需要混合用户?错误仍然是一个特质!为什么我需要混合用户?

Tweeter没有 User,它要求 Tweeter中的任何混合物都是一个(is is is is is is User中)。

trait Wrong不在User中混合,因此它不符合Tweeter的自型。

您要么需要将User混合到Wrong中,就像您使用Correct一样, Wrong还必须需要User作为一个自我类型以符合Tweeter的自我型。

trait Wrong extends Tweeter { self: User => }

最新更新