查看源代码 Inspect.Opts (Elixir v1.16.2)
定义 Inspect
协议使用的选项。
以下字段可用:
:base
- 以:binary
、:octal
、:decimal
或:hex
格式打印整数和二进制。默认值为:decimal
。:binaries
- 当:as_binaries
时,所有二进制将以位语法打印。当
:as_strings
时,所有二进制将以字符串形式打印,不可打印的字节将被转义。当使用默认值
:infer
时,如果:base
为:decimal
且二进制可打印,则二进制将以字符串形式打印,否则以位语法打印。有关字符串可打印性的详细内容,请参考String.printable?/1
。:charlists
- 当:as_charlists
时,所有列表将以字符列表形式打印,不可打印的元素将被转义。当
:as_lists
时,所有列表将以列表形式打印。当使用默认值
:infer
时,如果列表可打印,则列表将以字符列表形式打印,否则以列表形式打印。有关字符列表可打印性的详细内容,请参考List.ascii_printable?/1
。:custom_options
(自 v1.9.0 起) - 一个关键字列表,用于存储自定义用户定义的选项。当对嵌套结构体实现Inspect
协议时,这对于传递自定义选项非常有用。它支持一些预定义的键:
:sort_maps
(自 v1.14.4 起) - 如果设置为true
,则对映射中的键值对进行排序。这对于测试非常有用,因为映射键的顺序是随机的,这有助于使映射检查确定性。
:inspect_fun
(自 v1.9.0 起) - 用于构建代数文档的函数。默认值为Inspect.Opts.default_inspect_fun/0
。:limit
- 限制元组、位串、映射、列表和任何其他项目集合中检查的项目数量,但可打印的字符串和可打印的字符列表除外,它们使用:printable_limit
选项。如果您不想将项目数量限制在特定数量,请使用:infinity
。它接受一个正整数或:infinity
。默认值为50
。:pretty
- 如果设置为true
,则启用漂亮打印。默认值为false
。:printable_limit
- 限制可打印字符串和可打印字符列表中检查的字符数量。您可以使用String.printable?/1
和List.ascii_printable?/1
检查给定字符串或字符列表是否可打印。如果您不想将字符数量限制在特定数量,请使用:infinity
。它接受一个正整数或:infinity
。默认值为4096
。:safe
- 当false
时,在检查结构体时发生的错误将作为错误引发,而不是被包装在Inspect.Error
异常中。这在调试自定义检查实现的错误和崩溃时非常有用。默认值为true
。:structs
- 当false
时,结构体不会通过检查协议格式化,而是以映射形式打印。默认值为true
。:syntax_colors
- 当设置为颜色关键字列表时,输出将被着色。键是类型,值是用于每个类型的颜色(例如,[number: :red, atom: :blue]
)。类型可以包括:atom
、:binary
、:boolean
、:list
、:map
、:number
、:regex
、:string
、:tuple
或一些表示 AST 的类型,如:variable
、:call
和:operator
。自定义数据类型可以提供自己的选项。颜色可以是任何IO.ANSI.ansidata/0
,如IO.ANSI.format/1
所接受。可以从IO.ANSI.syntax_colors/0
获取默认颜色列表。:width
- 当 pretty 为true
或打印到 IO 设备时使用的每行字符数。设置为0
强制每个项目在单独的行上打印。如果您不想将项目数量限制在特定数量,请使用:infinity
。默认值为80
。
概述
类型
@type color_key() :: atom()
@type t() :: %Inspect.Opts{ base: :decimal | :binary | :hex | :octal, binaries: :infer | :as_binaries | :as_strings, char_lists: term(), charlists: :infer | :as_lists | :as_charlists, custom_options: keyword(), inspect_fun: (any(), t() -> Inspect.Algebra.t()), limit: non_neg_integer() | :infinity, pretty: boolean(), printable_limit: non_neg_integer() | :infinity, safe: boolean(), structs: boolean(), syntax_colors: [{color_key(), IO.ANSI.ansidata()}], width: non_neg_integer() | :infinity }
函数
@spec default_inspect_fun() :: (term(), t() -> Inspect.Algebra.t())
返回默认检查函数。
@spec default_inspect_fun((term(), t() -> Inspect.Algebra.t())) :: :ok
设置默认检查函数。
谨慎设置此选项,因为它会改变系统中所有值的检查方式。此功能的主要用途是提供一个入口点来过滤检查的值,以便实体符合数据安全和数据隐私方面的规则和法规。
强烈不建议库设置自己的函数,因为这必须由应用程序控制。库应该改为定义自己的结构体,并具有自定义检查实现。如果库必须更改默认检查函数,那么最好让库的用户显式调用 default_inspect_fun/1
,并使用他们选择的函数。
默认值为 Inspect.inspect/2
。
示例
previous_fun = Inspect.Opts.default_inspect_fun()
Inspect.Opts.default_inspect_fun(fn
%{address: _} = map, opts ->
previous_fun.(%{map | address: "[REDACTED]"}, opts)
value, opts ->
previous_fun.(value, opts)
end)
构建一个 Inspect.Opts
结构体。