Inspect
检查协议
该Inspect
协议负责将任何Elixir数据结构转换为代数文档。然后将此文档格式化为漂亮打印格式或常规格式。
该inspect/2
函数接收要检查的实体,然后接收由结构表示的检查选项Inspect.Opts
。
检查使用可用的功能完成Inspect.Algebra
。
实例
很多时候,检查结构可以根据现有实体的功能来实现。例如,这是MapSet
的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和另一个字符串">"。
由于常规字符串是代数文档中的有效实体,检查的实现可能会简单地返回一个字符串,尽管这样可以避免任何漂亮的打印。
错误处理
如果在检查结构时出现错误,则elxir将引发ArgumentError
错误,并将自动返回到用于打印结构的原始表示形式。
但是,您可以通过直接调用检查实现来访问基础错误。例如,测试检查。在上面的MapSet中,您可以以以下方式调用它:
Inspect.MapSet.inspect(MapSet.new, %Inspect.Opts{})
摘要
类型
t()
功能
inspect(term, opts)
类型
t()
t() :: term