Tuples
| Tuple literals | |
| Read with elem | |
| Put a new tuple | |
| Tuples vs lists |
Tuple literals
Curly braces build a tuple, a fixed size container that can mix types freely.
Tagged tuples pair a label atom with a value, which is the common way to report outcomes.
The tuple_size call below counts the slots of the status value.
point = {10, 20}
status = {:ok, 42}
tuple_size(status)
Read with elem
The elem function reads one slot by its zero based index.
The first slot is zero, the second is one, and so on down the tuple.
Reading past the last slot raises an error, so check the size first when in doubt.
status = {:ok, 42}
elem(status, 0)
elem(status, 1)
Put a new tuple
Tuples never change in place, since all Elixir data is immutable.
The put_elem function copies the tuple with one slot replaced and returns the copy.
The original binding below still points at the old value after the update.
status = {:ok, 1}
next = put_elem(status, 1, 2)
next
status
Tuples vs lists
Tuples fit fixed shapes that code reads by position, while lists fit growing sequences read front to back.
Reading slot ten of a tuple costs the same as reading slot zero, but inserting into the middle is not their job.
When the shape is known, reach for a tuple, and when the length varies, reach for a list.
{:ok, value} = {:ok, 42}
value
hd([1, 2, 3])
Next: Maps
Article author: Arthur Isaev