Scala でリストを連結する場合、:::
との間に違いはありますか?++
scala> List(1,2,3) ++ List(4,5)
res0: List[Int] = List(1, 2, 3, 4, 5)
scala> List(1,2,3) ::: List(4,5)
res1: List[Int] = List(1, 2, 3, 4, 5)
scala> res0 == res1
res2: Boolean = true
からドキュメント++
はより一般的であるのに対し、:::
は- 固有であるように見えますList
。後者は他の関数型言語で使用されているため提供されているのでしょうか?
ベストアンサー1
レガシー。リストは元々関数型言語の外観を持つように定義されていました。
1 :: 2 :: Nil // a list
list1 ::: list2 // concatenation of two lists
list match {
case head :: tail => "non-empty"
case Nil => "empty"
}
もちろん、Scala はアドホックな方法で他のコレクションを進化させました。2.8 がリリースされたとき、コレクションはコードの再利用と API の一貫性を最大限に高めるために再設計され、任意の 2つ++
のコレクション (さらには反復子)を連結できるようになりました。ただし、リストは、非推奨となった 1 つまたは 2 つの演算子を除いて、元の演算子を保持しています。