以下代码段:
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>
Tweeter有一个用户,那么为什么在扩展Tweeter时需要混合User?错了还是个特质!为什么我需要混合用户?
答案 0 :(得分:1)
Tweeter
没有User
,它要求Tweeter
中的任何混合都是一个(在User
中混合)。
trait Wrong
不会混入User
,因此无法符合Tweeter
的自我类型。
您需要将User
混合到Wrong
,就像您使用Correct
,或 Wrong
一样,还需要{{1}作为符合User
自我类型的自我类型。
Tweeter