我在看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/