自身类型

自身类型是声明一个特质必须混入另外一种特质的方法,即使它并不继承。这使得不需要引入就可以使用依赖的成员。

自身类型可以缩短 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 )。

知识共享许可协议 BY 小鹏            此页面修订于 2019-07-17 11:48:19

results matching ""

    No results matching ""