元組 (Tuple)
元組是一組固定大小的記憶體空間,用大括號包裹,裡面可存放種型態的資料,並且與其他語言的陣列一樣,讀取所花的時間是O(1)。
iex(1)> {}
{}
iex(2)> {"haha", :hehe, 100}
{"haha", :hehe, 100}
原則上元組常用在函式的返回值。例如成功時可能會返回{:ok, result},錯誤或例外發生時返回{:error, msg},這種回傳的資料格式跟其他語言比起來式獨特的,畢竟在其他語言一般會使用Map或是php的array那種形式來做為資料回傳值,但得益於elixir的模式比較(pattern matching)(之後會提到),這種格式的回傳值在elixir中是易於使用的,並且成為elixir社群開發者的共識。
值得注意的是,Tuple是沒有內置枚舉函式的,因此如果有需要枚舉或是一次處理的資料型態,會建議使用List。Tuple雖然有著類似陣列的資料結構,但他的精神主要是用來儲存有限的資料組。
相關函式:
elem/2
- 用來讀取tuple的元素以下程式碼對應Javascript的arr = [1, 4, 7, 8, 34] 的 arr[2]
iex(1)> elem({1, 4, 7, 8, 34}, 2)
7
Tuple.to_list(tuple)
- 需要把tuple轉乘List結構時(可能需要遍歷時)iex(1)> Tuple.to_list({1, 4, 6, 78})
[1, 4, 6, 78]
Tuple.append(tuple, value)
- 新增值至tuple (類似js Array 的 push)Tuple.delete_at(tuple, index)
- 刪除tuple的值以上函式的前綴Tuple字樣,是函式的模組名稱。在elixir中,相同功能或是處理同種結構的函式會被包裝在同個模組底下,和OOP中的類別是類似的概念,只是類別的方法是以物件本身為主體,elixir中的模組則是以要處理的資料為主體。