查看源代码 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?/1List.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

概述

函数

返回默认检查函数。

设置默认检查函数。

构建一个 Inspect.Opts 结构体。

类型

@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
}

函数

链接到此函数

default_inspect_fun()

查看源代码 (自 1.13.0 起)
@spec default_inspect_fun() :: (term(), t() -> Inspect.Algebra.t())

返回默认检查函数。

链接到此函数

default_inspect_fun(fun)

查看源代码 (自 1.13.0 起)
@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)
链接到此函数

new(opts)

查看源代码 (自 1.13.0 起)
@spec new(keyword()) :: t()

构建一个 Inspect.Opts 结构体。