Poin yang berbeda adalah kalimat pertama diurai sebagai:
scala> List(1,2,3).++(List(4,5))
res0: List[Int] = List(1, 2, 3, 4, 5)
Sedangkan contoh kedua diuraikan sebagai:
scala> List(4,5).:::(List(1,2,3))
res1: List[Int] = List(1, 2, 3, 4, 5)
Jadi, jika Anda menggunakan makro, Anda harus berhati-hati.
Selain itu, ++
untuk dua daftar memanggil:::
tetapi dengan lebih banyak overhead karena meminta nilai implisit untuk memiliki pembangun dari Daftar ke Daftar. Tapi microbenchmarks tidak membuktikan sesuatu yang berguna dalam arti itu, saya kira kompiler mengoptimalkan panggilan tersebut.
Tolok Ukur Mikro setelah pemanasan.
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
Seperti yang dikatakan Daniel C. Sobrai, Anda dapat menambahkan konten dari koleksi apa pun ke daftar menggunakan ++
, sedangkan dengan :::
Anda hanya dapat menggabungkan daftar.
:::
merupakan operator awalan seperti semua metode yang dimulai dengan: