Scala之旅-自身类型

Scala之旅-自身类型

自身类型(Self-type)

自身类型是一种将一个特征声明为必须混入另一个特征的方法,即使另一个特征没有直接扩展这一个特征。这使得不需要引入被依赖的特征的成员,就可以使用它们。

自身类型是一种缩窄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"

由于我们在特征Tweeter中声明了this: User =>,对于方法tweet来说,变量username是在其作用域之内的。这也意味着由于VerifiedTweeter扩展自Tweeter,它也必须混合进User(使用with User)。

参考资料

本文译自Tour Of Scala – Self-type

上一篇:Scala之旅-复合类型

下一篇:Scala之旅-隐式参数

发表评论

电子邮件地址不会被公开。 必填项已用*标注