3
我很驚訝地發現,使用to[Col]
爲Seq
默認的實現是Vector
而不是List
:toSeq來自於不同的行爲[SEQ]
val x = Seq(1, 2, 3) // -> List(1, 2, 3)
x.toSeq // -> List(1, 2, 3)
x.to[Seq] // -> Vector(1, 2, 3)
怎麼來的?
我很驚訝地發現,使用to[Col]
爲Seq
默認的實現是Vector
而不是List
:toSeq來自於不同的行爲[SEQ]
val x = Seq(1, 2, 3) // -> List(1, 2, 3)
x.toSeq // -> List(1, 2, 3)
x.to[Seq] // -> Vector(1, 2, 3)
怎麼來的?
的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',並且它將會被傳遞給(Seq)'。 –