Range.map 将始终返回一个 IndexedSeq,一个 IndexedSeq 使用一个 Vector 作为默认实现,所以 Range.map 将(总是?)返回一个 Vector。什么机制控制 Range.map 如何返回 Vector?是什么让特征具有“默认值”?
答案 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 中都有使用。