จุดที่แตกต่างคือประโยคแรกที่แยกวิเคราะห์เป็น:
scala> List(1,2,3).++(List(4,5))
res0: List[Int] = List(1, 2, 3, 4, 5)
ในขณะที่ตัวอย่างที่สองจะถูกแยกวิเคราะห์เป็น:
scala> List(4,5).:::(List(1,2,3))
res1: List[Int] = List(1, 2, 3, 4, 5)
ดังนั้นหากคุณใช้มาโครคุณควรระวัง
นอกจากนี้++
สำหรับสองรายการกำลังโทร:::
แต่มีค่าใช้จ่ายมากขึ้นเพราะมันจะขอค่าโดยนัยที่จะมีการสร้างจากรายการไปยังรายการ แต่ microbenchmarks ไม่ได้พิสูจน์อะไรที่มีประโยชน์ในแง่นั้นฉันเดาว่าคอมไพเลอร์จะปรับการเรียกเช่นนั้นให้เหมาะสม
Micro-Benchmarks หลังจากอุ่นขึ้น
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 กล่าวคุณสามารถเพิ่มเนื้อหาของคอลเลกชันใด ๆ ลงในรายการโดยใช้++
ในขณะที่:::
คุณสามารถเชื่อมโยงรายการเท่านั้น
:::
เป็นตัวดำเนินการคำนำหน้าเช่นวิธีการทั้งหมดที่เริ่มต้นด้วย: