在Elixir REPL iex中,如何抑制长模式匹配结果

Tho*_*wne 6 elixir

在Elixir repl,iex中,当我执行赋值时,我得到以黄色打印的模式匹配的结果:

在此输入图像描述

这很好,直到模式匹配很长,例如文件:

在此输入图像描述

......显然,如果它是一个大文件,它a)需要永远(不是因为阅读时间,而是准备打印模式匹配到屏幕),然后b)它滚动了很长时间.

如何抑制此行为,或限制模式匹配输出的大小?

Dog*_*ert 8

我只是; 0在表达式的末尾添加另一个语句(是一个很好的短语),这使得iex不打印第一个表达式的输出,只有最后一个:

iex(1)> a = Enum.to_list(1..100); 0
0
iex(2)> a
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,
 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42,
 43, 44, 45, 46, 47, 48, 49, 50, ...]
Run Code Online (Sandbox Code Playgroud)


men*_*els 4

Elixir REPL 如何打印您的条款

Elixir REPL 默认情况下限制要打印的输出的长度:

iex(16)> Enum.to_list(1..100)
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 
 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 
 42, 43, 44, 45, 46, 47, 48, 49, 50, ...]
Run Code Online (Sandbox Code Playgroud)

您可以使用Kernel.inspect/2带有:limit选项的函数来更改它。例如,Kernel.inspect Enum.to_list(1..100), limit: :infinity将打印整个列表。

但是,该:limit选项不适用于字符串或字符列表,并File.read/1返回字符串(UTF-8 编码的二进制)。但是您仍然可以通过告诉将inspect/2字符串视为正常的字节序列(只是二进制)来限制打印的输出:

Kernel.inspect File.read!("a.txt"), limit: 60, binaries: :as_binaries

使用流遍历整个文件

要对文件的每一行执行操作,您可以使用Enum.each/2Stream 并向其传递适当的函数:

File.stream!("a.txt") |> Enum.each fn line -> IO.puts line end

这段代码将简单地打印每一行。

  • 您可以使用“IEx.configure/1”在每个 IEx 会话中设置它或通过“~/.iex.exs”文件永久设置它。有关更多详细信息,请参阅[此处](http://elixir-lang.org/docs/stable/iex/IEx.html#module-the-iex-exs-file)。 (2认同)