Scala 導覽

自類型

語言

自類型是一種宣告特質必須混合到另一個特質中的方式,即使它並未直接延伸它。這讓相依項的成員在沒有導入的情況下可用。

自類型是一種縮小 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 =>,現在變數 usernametweet 方法的範圍內。這也表示,由於 VerifiedTweeter 延伸 Tweeter,它也必須混合 User(使用 with User)。

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, User:  // We mixin User because Tweeter required it
  def username = s"real $username_"

val realBeyoncé = VerifiedTweeter("Beyoncé")
realBeyoncé.tweet("Just spilled my glass of lemonade")  // prints "real Beyoncé: Just spilled my glass of lemonade"

因為我們在 trait Tweeter 中表示 this: User =>,現在變數 usernametweet 方法的範圍內。這也表示,由於 VerifiedTweeter 延伸 Tweeter,它也必須混合 User(使用 , User)。

此頁面的貢獻者