Кортежи
Функции для работы с кортежами.
Кортежи — упорядоченные коллекции элементов; кортежи могут содержать элементы любого типа, и кортеж может содержать элементы разных типов. Для создания кортежей можно использовать фигурные скобки:
iex> {}
{}
iex> {1, :two, "three"}
{1, :two, "three"} Кортежи хранят элементы непрерывно в памяти; это означает, что доступ к элементу кортежа по индексу (что можно сделать с помощью функции Kernel.elem/2) выполняется за постоянное время:
iex> tuple = {1, :two, "three"}
iex> elem(tuple, 0)
1
iex> elem(tuple, 2)
"three" То же самое относится к получению размера кортежа (через Kernel.tuple_size/1):
iex> tuple_size({})
0
iex> tuple_size({1, 2, 3})
3 Кортежи, хранящиеся непрерывно в памяти, также означают, что обновление кортежа (например, замена элемента с помощью Kernel.put_elem/3) создаст копию всего кортежа.
Кортежи не предназначены для использования в качестве типа «коллекция» (что также предполагается отсутствием реализации протокола Enumerable для кортежей): они в основном предназначены для использования в качестве контейнера фиксированного размера для нескольких элементов. Например, кортежи часто используются для возврата «обогащенных» значений функциями: распространённый шаблон — возвращать {:ok, value} в успешных случаях и {:error, reason} в неудачных случаях. Например, именно это делает File.read/1: она возвращает {:ok, contents} если чтение заданного файла успешно, или {:error, reason} в противном случае (например, {:error, :enoent} если файл не существует).
Этот модуль предоставляет функции для работы с кортежами; некоторые дополнительные функции для работы с кортежами можно найти в Kernel (Kernel.tuple_size/1, Kernel.elem/2, Kernel.put_elem/3 и другие).
Обзор
Функции
- append(tuple, value)
-
Вставляет элемент в конец кортежа
- delete_at(tuple, index)
-
Удаляет элемент из кортежа
- duplicate(data, size)
-
Создаёт новый кортеж
- insert_at(tuple, index, value)
-
Вставляет элемент в кортеж
- to_list(tuple)
-
Преобразует кортеж в список
Функции
append(tuple, value)
append(tuple(), term()) :: tuple()
Вставляет элемент в конец кортежа.
Возвращает новый кортеж с добавленным элементом в конце, содержащий элементы в tuple за которым следует value в качестве последнего элемента.
Встраивается компилятором.
Примеры
iex> tuple = {:foo, :bar}
iex> Tuple.append(tuple, :baz)
{:foo, :bar, :baz} delete_at(tuple, index)
delete_at(tuple(), non_neg_integer()) :: tuple()
Удаляет элемент из кортежа.
Удаляет элемент по указанному index из tuple. Вызывает ArgumentError, если index отрицательный или больше или равен длине tuple. Индекс нулевой.
Встраивается компилятором.
Примеры
iex> tuple = {:foo, :bar, :baz}
iex> Tuple.delete_at(tuple, 0)
{:bar, :baz} duplicate(data, size)
duplicate(term(), non_neg_integer()) :: tuple()
Создаёт новый кортеж.
Создаёт кортеж из size содержащий заданное data в каждой позиции.
Встраивается компилятором.
Примеры
iex> Tuple.duplicate(:hello, 3)
{:hello, :hello, :hello} insert_at(tuple, index, value)
insert_at(tuple(), non_neg_integer(), term()) :: tuple()
Вставляет элемент в кортеж.
Вставляет value в tuple по указанному index. Вызывает ArgumentError, если index отрицательный или больше длины tuple. Индекс нулевой.
Встраивается компилятором.
Примеры
iex> tuple = {:bar, :baz}
iex> Tuple.insert_at(tuple, 0, :foo)
{:foo, :bar, :baz}
iex> Tuple.insert_at(tuple, 2, :bong)
{:bar, :baz, :bong} to_list(tuple)
to_list(tuple()) :: list()
Преобразует кортеж в список.
Возвращает новый список со всеми элементами кортежа.
Встраивается компилятором.
Примеры
iex> tuple = {:foo, :bar, :baz}
iex> Tuple.to_list(tuple)
[:foo, :bar, :baz]
© 2012 Plataformatec
Licensed under the Apache License, Version 2.0.
https://hexdocs.pm/elixir/1.5.3/Tuple.html