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,所以变量现在usernametweet方法的范围内这也意味着,由于VerifiedTweeterextend Tweeter,它也必须混入User(使用with User)。

原文地址:https://www.cnblogs.com/zhouwenyang/p/14034435.html