Inspect

Inspect协议负责将任何Elixir数据结构转换为代数文档。然后将此文档格式化为漂亮打印格式或常规格式。

inspect/2函数接收要检查的实体,然后接收由结构表示的检查选项Inspect.Opts

检查使用可用的功能完成Inspect.Algebra

实例

很多时候,检查结构可以根据现有实体的功能来实现。例如,这是MapSetinspect实现:

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

inspect(term, opts)

扫码关注云+社区

领取腾讯云代金券