Spec-Zone.ru › Elixir 1.4

Протокол инспекции protocol

Протокол Inspect отвечает за преобразование любых структур данных Elixir в документ алгебры. Этот документ затем форматируется, либо в формате красивой печати, либо в обычном.

Функция 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.4.5/Inspect.html

Spec-Zone.ru

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