在Elixir repl,iex中,当我执行赋值时,我得到以黄色打印的模式匹配的结果:
这很好,直到模式匹配很长,例如文件:
......显然,如果它是一个大文件,它a)需要永远(不是因为阅读时间,而是准备打印模式匹配到屏幕),然后b)它滚动了很长时间.
如何抑制此行为,或限制模式匹配输出的大小?
我只是; 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)
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
这段代码将简单地打印每一行。
| 归档时间: |
|
| 查看次数: |
490 次 |
| 最近记录: |