toSeq与[Seq]的行为不同

时间:2013-10-23 08:29:47

标签: scala collections

我很惊讶地发现使用to[Col] Seq的默认实现是Vector而不是List

val x = Seq(1, 2, 3)  // -> List(1, 2, 3)
x.toSeq               // -> List(1, 2, 3)
x.to[Seq]             // -> Vector(1, 2, 3)

怎么回事?

1 个答案:

答案 0 :(得分:2)

to方法定义在GenTraversableOnce[A]

def to[Col[_]](implicit cbf: CanBuildFrom[Nothing, A, Col[A]]): Col[A] 

问题是GenTraversableOnce没有Repr类型。因此:

implicitly[CanBuildFrom[Nothing, Int, Seq[Int]]].apply.result  // Vector()

,而

implicitly[CanBuildFrom[Seq[Int], Int, Seq[Int]]].apply.result // List()
实际上,我认为这是一个错误。它只能通过将方法移动到GenTraversableLike(?)来解决。意见?