2013-10-23 51 views
3

我很驚訝地發現,使用to[Col]Seq默認的實現是Vector而不是ListtoSeq來自於不同的行爲[SEQ]

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

怎麼來的?

回答

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(?)來解決。意見?

+0

注意:Scala集合檢修將移除'CanBuildFrom',並且它將會被傳遞給(Seq)'。 –