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

时间:2016-08-29 14:05:04

标签: elixir

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

enter image description here

在模式匹配很长之前这很好,例如文件:

enter image description here

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

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

3 个答案:

答案 0 :(得分:8)

我只是在表达式的末尾添加另一个语句(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, ...] 不打印第一个表达式的输出,只打印最后一个:

onClick

答案 1 :(得分:2)

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, ...]

您可以使用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

使用流

浏览整个文件

要对文件的每一行执行操作,您可以在Stream上使用Enum.each/2并传递相应的函数:

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

此代码只会打印每一行。

答案 2 :(得分:1)

虽然@dogbert的答案是最简单的解决方案,但是还有另一种有趣的方式来抑制IEx本身提供的IEx输出。只需在最后调用此函数:

IEx.dont_display_result

因此,您可以在IEx中执行此操作:

f = File.read!(my_large_file); IEx.dont_display_result