为什么scala.collection中的traits可以创建实例?

时间:2014-11-03 07:08:05

标签: scala collections

我在Scala中尝试以下代码,它来自An Overview of the Collections API

import collection._
scala> Traversable(1, 2, 3)
res5: Traversable[Int] = List(1, 2, 3)
scala> Iterable("x", "y", "z")
res6: Iterable[String] = List(x, y, z)
scala> Map("x" -> 24, "y" -> 25, "z" -> 26)
res7: scala.collection.Map[String,Int] = Map(x -> 24, y -> 25, z -> 26)
scala> SortedSet("hello", "world")
res9: scala.collection.SortedSet[String] = TreeSet(hello, world)
scala> IndexedSeq(1.0, 2.0)
res11: IndexedSeq[Double] = Vector(1.0, 2.0)

结果显示这些特征都可以调用其apply方法来创建其实现的实例。但在寻找scala.collection.package物后,我一无所获。我认为必须有某个地方将这些特性与其子类绑定并导入到我的程序中。有人可以解释它在哪里吗?

1 个答案:

答案 0 :(得分:7)

你在特质的伴侣对象上调用apply,而不是在特质上。

例如,Traversable

如果您点击随播广告对象的scaladoc中的apply,您可以看到Traversable对象从GenericCompanion继承了其应用方法,其中包含指向source所以你可以看到它是如何实现的。