Кортежи
Функции для работы с кортежами.
Кортежи — упорядоченная коллекция элементов; кортежи могут содержать элементы любого типа, и кортеж может содержать элементы разных типов. Для создания кортежей можно использовать фигурные скобки:
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.4.5/Tuple.html