跳至主要内容

Scala Cons - construct

在 Scala 中,cons 是 construct 的縮寫,常用來建立 List 的新元素,特別是以遞迴方式建立 immutable List 時。 cons 屬於建構鏈結結構運算子之一,通常限定指 ::

Cons 語法 ::

  • 在 Scala 中 cons通常限定指的是 :: 運算子。
  • 把一個元素 headElement 加到 existingList 的開頭,產生一個新的 List

symtax

   val newList = headElement :: existingList 

example

    val list1 = 2 :: 3 :: 4 :: Nil  // 建立一個 List(2, 3, 4)
// 實際等價同於 2 :: (3 :: (4 :: Nil))
val list2 = 1 :: list1 // 使用 cons 將 1 放到 list1 前面 => List(1, 2, 3, 4)

建構鏈結結構相關運算子

  • 與 Cons 功能類似的運算子: 下列運算子都可用來 建構鏈結結構
    • 例如- ::, :+, +:, ++, :::
  • 註:
    • 建構鏈結結構運算子有 left-associative, right-associative 兩類
    • cons 主要是 List 的方法,所以是設計給 List 使用。回傳的 elements 有序排列。Vector/Seq/LaztList/ArrayBuffer 也有部分類似的客製化運算子。
    • Nil 是空的 List,等於 List()

Right-Associative 右結合運算子

  • 右結合是由右邊開始呼叫,所以最右邊是呼叫方。
  • 觀察中似乎:
    • 如果 運算子以冒號 : 結尾,那它就是 右結合
    • 也就是由右邊向左進行指定操作
運算子功用呼叫方範例
::將元素加到 List 前面。
範例:建構一個全新的 List 物件 
空集合在最後面var list = 1 :: 2 :: 3 :: 4 :: NilList(1,2,3,4)
:+集合的__末端__增加元素集合在最前面 var end = list :+ 5 :+ 6List(1,2,3,4 ,5,6)
+:集合的__前端__增加元素 集合在最後面 var start = 7 +: 8 +: endList( 7,8,1,2,3,4,5,6)
++合併兩個集合  var set = Set(1,2,3)
var list = List(11,22,33)
var combined = set ++ list
依最左邊的集合決定型別 Set(...)
:::合併兩個 Listvar list1 = List(1,2,3)
var list2 = List(11,22,33)
var combined = set ++ list
List(1,2,3,11,22,33)