Elixir语言中 Inspect 相关用法介绍如下。
  协议将 Elixir 数据结构转换为代数文档。Inspect 
本文档涉及为您自己的数据结构实现  协议。要了解有关使用检查的更多信息,请参阅 Inspect   和 Kernel.inspect/2   。IO.inspect/2 
  函数接收要检查的实体,然后是检查选项,由结构 inspect/2   表示。代数文档的构建是使用 Inspect.Opts   完成的。Inspect.Algebra 
例子
很多时候,检查结构可以在现有实体的函数中实现。例如,这里是   的 MapSet   实现:inspect/2 
defimpl Inspect, for: MapSet do
  import Inspect.Algebra
  def inspect(map_set, opts) do
    concat(["#MapSet<", to_doc(MapSet.to_list(map_set), opts), ">"])
  end
end
  函数来自concat/1  ,它将代数文档连接在一起。在上面的示例中,它连接字符串 Inspect.Algebra "#MapSet<" 、   返回的文档和最终字符串 Inspect.Algebra.to_doc/2 ">" 。我们为模块名称添加前缀# 以表示检查演示实际上不是有效的 Elixir 语法。
最后,音符字符串本身是有效的代数文档,在打印时保持格式不变。这意味着您的  实现可能只是返回一个字符串,尽管这将没有任何pretty-printing。Inspect 
错误处理
如果在检查您的结构时出现错误,Elixir 将引发   错误并自动回退到打印结构的原始表示。ArgumentError 
但是,您可以通过直接调用   实现来访问底层错误。例如,要测试上面的Inspect  ,您可以调用它:Inspect.MapSet 
Inspect.MapSet.inspect(MapSet.new(), %Inspect.Opts{})
导出
  协议可以派生以隐藏结构中的某些字段,因此它们不会出现在日志、检查和类似内容中。这对于包含私人信息的字段特别有用。Inspect 
选项 :only 和 :except 可以与 @derive 一起使用,以指定哪些字段应该和不应该出现在代数文档中:
defmodule User do
  @derive {Inspect, only: [:id, :name]}
  defstruct [:id, :name, :address]
end
inspect(%User{id: 1, name: "Homer", address: "742 Evergreen Terrace"})
#=> #User<id: 1, name: "Homer", ...>
相关用法
- Elixir Inspect.Algebra.container_doc用法及代码示例
 - Elixir Inspect.Algebra.format用法及代码示例
 - Elixir Inspect.Algebra.glue用法及代码示例
 - Elixir Inspect.Algebra.string用法及代码示例
 - Elixir Inspect.Algebra.space用法及代码示例
 - Elixir Inspect.Algebra用法及代码示例
 - Elixir Inspect.Algebra.line用法及代码示例
 - Elixir Inspect.Algebra.nest用法及代码示例
 - Elixir Inspect.Algebra.concat用法及代码示例
 - Elixir Inspect.Algebra.flex_break用法及代码示例
 - Elixir Inspect.Opts.default_inspect_fun用法及代码示例
 - Elixir Inspect.Algebra.break用法及代码示例
 - Elixir Inspect.Algebra.next_break_fits用法及代码示例
 - Elixir Inspect.Algebra.fold_doc用法及代码示例
 - Elixir Inspect.Algebra.group用法及代码示例
 - Elixir Inspect.Algebra.empty用法及代码示例
 - Elixir Integer.pow用法及代码示例
 - Elixir Integer.undigits用法及代码示例
 - Elixir Integer.floor_div用法及代码示例
 - Elixir Integer.extended_gcd用法及代码示例
 - Elixir Integer.to_charlist用法及代码示例
 - Elixir Integer.parse用法及代码示例
 - Elixir Integer.mod用法及代码示例
 - Elixir Integer.is_even用法及代码示例
 - Elixir Integer.to_string用法及代码示例
 
注:本文由纯净天空筛选整理自elixir-lang.org大神的英文原创作品 Inspect。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。
