toSeq 与 to[Seq] 行为不同

3

我很惊讶地发现使用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个回答

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()

实际上,我认为这是一个bug。只有将该方法移动到GenTraversableLike才能解决它。你有什么看法?


注意:Scala集合的大修将删除CanBuildFrom,并且将使用to(Seq) - 0__

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接