以下代码段:
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 => }