IO.inspect打印列表或映射两次是否为默认行为?求原因解析
IO.inspect 重复打印列表/映射的原因解析
这不是IO.inspect的默认行为,两次打印的根源是IEx(Elixir交互环境)的自动输出特性,结合你代码的写法导致的:
两次打印的具体原因
- 第一次打印:是你显式调用
IO.inspect的结果。IO.inspect的设计是打印输入数据的同时返回原数据,方便在管道链中插入调试,不会中断后续流程。 - 第二次打印:是IEx的默认行为——IEx会自动打印任何表达式的返回值。你的
parse_csv函数最后返回的就是经过IO.inspect处理后的列表(因为IO.inspect返回原数据),所以IEx把这个返回值又打印了一遍。
颜色差异的含义
终端中第二个列表的颜色不同,是IEx用来区分两种输出的标识:
- 第一次是
IO.inspect的输出,默认使用终端的常规文本颜色; - 第二次是IEx自动打印的返回值,默认使用高亮颜色(比如蓝色),用来明确这是表达式执行后的返回结果,而非你主动调用打印函数的输出。
解决重复打印的方法
如果不想看到两次输出,可以用以下几种方式:
- 在函数末尾添加一个不返回列表的语句,比如:
def parse_csv do @csv_path |> Path.expand(__DIR__) |> File.stream!() |> CSV.decode(headers: true) |> Enum.into([]) |> IO.inspect() :ok # 让函数返回:ok,IEx会打印:ok而不是列表 end - 在IEx中调用函数时加个分号,抑制返回值打印:
parse_csv(); - 给
IO.inspect添加标签,让两次打印更容易区分(即使保留两次输出也能明确用途):|> IO.inspect(label: "CSV解析结果")
内容的提问来源于stack exchange,提问作者henhen
相关产品推荐
相关产品推荐

