特征(特别是集合特征)的默认实现如何工作?

时间:2021-04-22 08:35:52

标签: scala

Range.map 将始终返回一个 IndexedSeq,一个 IndexedSeq 使用一个 Vector 作为默认实现,所以 Range.map 将(总是?)返回一个 Vector。什么机制控制 Range.map 如何返回 Vector?是什么让特征具有“默认值”?

1 个答案:

答案 0 :(得分:3)

用于为 trait 提供默认实现的模式是通过伴随对象工厂方法。为了说明该模式,请考虑以下内容

trait Container

class TreasureChest extends Container
class BabySling extends Container
class OfficeCubicle extends Container

object Container {
  def apply() = new OfficeCubicle // this decides what is the default implementation
}

Container() // or just sugar for Container.apply()
// res0: OfficeCubicle = OfficeCubicle@7c182b25

我们在这里看到我们决定抽象 Container 的默认实现是 OfficeCubicle。但这是一个设计决定,我们也可以使用 BabySling 作为默认值。

沿着这些方向的模式在整个 Scala Collections 中都有使用。