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 :: Nil | List(1,2,3,4) |
:+ | 集合的__末端__增加元素 | 集合在最前面 | var end = list :+ 5 :+ 6 | List(1,2,3,4 ,5,6) |
+: | 集合的__前端__增加元素 | 集合在最後面 | var start = 7 +: 8 +: end | List( 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(...) | |
::: | 合併兩個 List | var list1 = List(1,2,3) var list2 = List(11,22,33) var combined = set ++ list | List(1,2,3,11,22,33) |