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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。