Просмотр протокола
Протокол 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.5.3/Inspect.html