Scala之旅(TOUR OF SCALA)——自类型(SELF-TYPE)

自类型是声明一个特征必须继承另一个特征,甚至没有直接继承它的一种方式。这使得依赖成员在没有导入时就可以使用。

自类型就是一种缩小 this 类型或 this 别名的类型。语法看起来像普通函数的语法但是意思完全不同。

在特征中使用自类型,定义一个标识符,是另一个类型的特征和一个 => 。(例如: someIdentifier: SomeOtherTrait =>)。

trait User {
    
    
`   def username: String
}

trait Tweeter {
    
    
    this: User =>   // 重新赋值 this
    def tweet(tweetText: String) = println(s"$username: $tweetText")
}

class VerifiedTweeter(val username_: String) extends Tweeter with User {
    
            // 我们混入 User 特征,因为 Tweeter 特征需要它
    def username = s"real $username_"
}

val realBeyoncé = new VerifiedTweeter("Beyoncé")
realBeyoncé.tweet("Just spilled my glass of lemonade")  // 会输出 “real Beyoncé: Just spilled my glass of lemonade”

因为 this: User => 自类型在 trait Tweeter 中,所以变量 username 就可以在 tweet 方法中使用。同时也意味着 VerifiedTweeter 类继承 Tweeter 特征时,必须混入 User 特征(使用 with User)。

猜你喜欢

转载自blog.csdn.net/cuipp0509/article/details/81347352