Spec-Zone.ru › Elixir 1.4

Кортежи

Функции для работы с кортежами.

Кортежи — упорядоченная коллекция элементов; кортежи могут содержать элементы любого типа, и кортеж может содержать элементы разных типов. Для создания кортежей можно использовать фигурные скобки:

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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API