scala之旅-核心语言特性【自身类型】(二十六)
自身类型是一种用于声明一个特性必须混合进另一个特性的方式,即使不是直接去扩展。这使得成员之间的依赖不需要import也可以实现。
一个自身类型可以缩小this关键字的类型,并且也是this的另一种别名标记符。这个语法看起来跟函数的语法很像但所包含的含义完全不同。
如果想要在特性中使用自身类型,需要编写一个标志符,用于将另一个类型的特性混合进,标志符用一个 =>
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"
因为我们this: User =>
在中说过trait Tweeter
,所以变量现在username
在tweet
方法的范围内。这也意味着,由于VerifiedTweeter
extend Tweeter
,它也必须混入User
(使用with User
)。