Spec-Zone.ru › Elixir 1.7

Просмотр протокола

Протокол Inspect преобразует структуру данных Elixir в документ алгебры.

Данная документация посвящена реализации протокола Inspect для собственных структур данных. Чтобы узнать больше о использовании просмотра, см. Kernel.inspect/2 и IO.inspect/2.

Функция inspect/2 получает сущность для проверки, за которой следуют параметры проверки, представленные структурой Inspect.Opts. Построение документа алгебры выполняется с помощью Inspect.Algebra.

Примеры

Зачастую, просмотр структуры можно реализовать на основе существующих сущностей. Например, вот реализация MapSet’s inspect:

defimpl Inspect, for: MapSet do
  import Inspect.Algebra

  def inspect(dict, opts) do
    concat(["#MapSet<", to_doc(MapSet.to_list(dict), opts), ">"])
  end
end

Функция concat/1 из Inspect.Algebra и она конкатенирует документы алгебры вместе. В примере выше она конкатенирует строку "MapSet<" (все строки являются допустимыми документами алгебры, которые сохраняют свой формат при красивом выводе), документ, возвращаемый Inspect.Algebra.to_doc/2, и другую строку ">".

Поскольку обычные строки являются допустимыми сущностями в документе алгебры, реализация inspect может просто вернуть строку, хотя это лишит её красивого вывода.

Обработка ошибок

В случае возникновения ошибки при проверке вашей структуры Elixir выведет ошибку ArgumentError и автоматически вернётся к исходному представлению для вывода структуры.

Тем не менее, вы можете получить доступ к основной ошибке, вызвав реализацию Inspect непосредственно. Например, чтобы протестировать Inspect.MapSet выше, вы можете вызвать её как:

Inspect.MapSet.inspect(MapSet.new(), %Inspect.Opts{})

Резюме

Типы

t()

Функции

inspect(term, opts)

Типы

t()

t() :: term()

Функции

inspect(term, opts)

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

Spec-Zone.ru

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