自身类型
自身类型是声明一个特质必须混入另外一种特质的方法,即使它并不继承。这使得不需要引入就可以使用依赖的成员。
自身类型可以缩短 this 类型或者其他别名为 this 的标识符。这种语法看起来像是普通的函数语法,但意思是完全不同的。
为了在特质中使用自身类型,需要写一个混入的其他特质的类型的标识符,以及一个 =>(例如 someIdentifier: SomeOtherTrait => )。
trait User {
def username: String
}
trait Tweeter {
this: User => // reassign this
def tweet(tweetText: String) = println(s"$username: $tweetText")
}
class VerifiedTweeter(val username_ : String) extends Tweeter with User { // We mixin User because Tweeter required it
def username = s"real $username_"
}
val realBeyoncé = new VerifiedTweeter("Beyoncé")
realBeyoncé.tweet("Just spilled my glass of lemonade") // prints "real Beyoncé: Just spilled my glass of lemonade"
当我们在 trait Tweeter 中写到 this: User => ,这时在 tweet 方法中 username 变量便处于作用域当中。这也意味着 VerifiedTweeter 要继承 Tweeter 的话,还必须要混入 User (使用 with User )。