一千萬個為什麽

搜索

Scala中的“<:”是什麽意思?

我在看p。 “Scala編程”第二版469。有一行代碼如下:

type Currency <: AbstractCurrency

我無法破譯這意味著什麽。

最佳答案

它意味著定義了一個抽象類型成員(在某些上下文中,例如特征或類),因此該上下文的具體實現必須定義該類型。但是,這種類型( Currency )必須實際上是 AbstractCurrency子類型。這樣,抽象上下文可以與 Currency 一起運行,因為它知道它理解 AbstractCurrency 的每個操作。

trait AbstractCurrency {
  def disappearInGreece(): Unit
}

abstract class Economy {
  type Currency <: AbstractCurrency

  def curr: Currency

 //can call disappear... because `Currency`
 //is an `AbstractCurrency`
  def shake(): Unit = curr.disappearInGreece()
}

嘗試在沒有約束的情況下定義 Currency

trait RadioactiveBeef

class NiceTry(val curr: RadioactiveBeef) extends Economy {
  type Currency = RadioactiveBeef
}

失敗。有約束的確定:

trait Euro extends AbstractCurrency

class Angela(val curr: Euro) extends Economy {
  type Currency = Euro
}

轉載註明原文: Scala中的“<:”是什麽意思?