Elixir如何配置IO.inspect默认limit参数为:infinity
Elixir 全局配置IO.inspect默认limit参数方法
首先明确:Elixir 原生没有提供可直接修改业务代码中IO.inspect默认参数的全局配置项,可通过以下两种方案实现免重复传limit: :infinity的需求:
方案1:封装自定义inspect函数(全场景通用,最推荐)
你可以在项目内写一个通用的调试封装函数,预置limit: :infinity的默认配置,同时支持传入其他自定义参数覆盖默认值,示例代码:defmodule InspectHelper do def pp(item, opts \\ []) do # 预置默认配置,手动传入的同名参数会覆盖默认值 default_opts = [limit: :infinity] IO.inspect(item, Keyword.merge(default_opts, opts)) end end后续调用时直接使用
InspectHelper.pp(something, label: something_else)即可,无需每次手动写limit参数。如果需要更便捷,可以把这个模块的函数import到常用业务模块,或者写到全局的.iex.exs文件中,IEx交互环境下也可以直接调用。方案2:配置IEx环境默认inspect参数(仅IEx场景生效)
如果你只是在IEx交互式命令行调试时需要默认不限制打印长度,可以在项目根目录新建或修改.iex.exs文件,加入如下配置:Application.put_env(:elixir, :inspect_opts, limit: :infinity)该配置仅对IEx会话内自动触发的打印逻辑生效,业务代码中直接调用
IO.inspect不会读取该配置。
注意:不建议通过修改Elixir源码、重写原生IO模块的方式修改默认参数,这类做法在Elixir版本升级、项目迁移时极易出现兼容问题,维护成本极高。
内容的提问来源于stack exchange,提问作者user483040
相关产品推荐
相关产品推荐

