Spec-Zone.ru › Elixir 1.4

Коллекционируемый протокол

Протокол для обхода структур данных.

Функция Enum.into/2 использует этот протокол для вставки перечисляемого в коллекцию:

iex> Enum.into([a: 1, b: 2], %{})
%{a: 1, b: 2}

Почему Коллекционируемый?

Протокол Enumerable полезен для извлечения значений из коллекции. Для поддержки широкого спектра значений функции, предоставляемые протоколом Enumerable, не сохраняют форму. Например, передача карты в Enum.map/2 всегда возвращает список.

Этот дизайн является преднамеренным. Enumerable был разработан для поддержки бесконечных коллекций, ресурсов и других структур с фиксированной формой. Например, не имеет смысла вставлять значения в диапазон, так как он имеет фиксированную форму, где хранятся только пределы диапазона.

Модуль Collectable был разработан для заполнения пробела, оставленного протоколом Enumerable. into/1 можно рассматривать как противоположность Enumerable.reduce/3. Если Enumerable относится к извлечению значений, то Collectable.into/1 относится к сбору этих значений в структуру.

Обзор

Типы

command()
t()

Функции

into(collectable)

Возвращает функцию, которая собирает значения вместе с начальным значением накопления

Типы

command()

command() :: {:cont, term()} | :done | :halt

t()

t() :: term()

Функции

into(collectable)

into(t()) :: {term(), (term(), command() -> t() | term())}

Возвращает функцию, которая собирает значения вместе с начальным значением накопления.

Возвращаемая функция получает коллекционируемый объект и вставляет заданное значение в него для каждой {:cont, term} инструкции.

:done передаётся, когда больше значений вставлять не будет, что полезно для закрытия ресурсов и нормализации значений. Коллекционируемый объект должен возвращаться при :done.

Если вставка внезапно прерывается, передаётся :halt, и она может вернуть любое значение, так как оно не будет использоваться.

© 2012 Plataformatec
Licensed under the Apache License, Version 2.0.
https://hexdocs.pm/elixir/1.4.5/Collectable.html

Spec-Zone.ru

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