Farklı bir nokta, ilk cümlenin şu şekilde ayrıştırılmasıdır:
scala> List(1,2,3).++(List(4,5))
res0: List[Int] = List(1, 2, 3, 4, 5)
İkinci örnek şu şekilde ayrıştırılır:
scala> List(4,5).:::(List(1,2,3))
res1: List[Int] = List(1, 2, 3, 4, 5)
Eğer makro kullanıyorsanız dikkatli olmalısınız.
Ayrıca, ++
iki liste için çağırıyor :::
ama daha fazla yük ile çünkü listeden Listeye bir yapıcı olması için örtük bir değer istiyor. Ancak mikrobenchmarks bu anlamda yararlı bir şey kanıtlamadı, sanırım derleyici bu aramaları optimize ediyor.
Isındıktan sonra Mikro Deneyler.
scala>def time(a: => Unit): Long = { val t = System.currentTimeMillis; a; System.currentTimeMillis - t}
scala>def average(a: () => Long) = (for(i<-1 to 100) yield a()).sum/100
scala>average (() => time { (List[Int]() /: (1 to 1000)) { case (l, e) => l ++ List(e) } })
res1: Long = 46
scala>average (() => time { (List[Int]() /: (1 to 1000)) { case (l, e) => l ::: List(e ) } })
res2: Long = 46
Daniel C. Sobrai'nin dediği gibi, herhangi bir koleksiyonun içeriğini kullanarak bir listeye ekleyebilirsiniz ++
, oysa :::
sadece listeleri birleştirebilirsiniz.
:::
ile başlayan tüm yöntemler gibi bir önek operatörü: