我在看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 - “<:”在Scala中是什么意思?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6828875/

10-10 11:43