0

我将 irb 作为一次性文本预处理工具运行。我在打印文本时遇到了直接的麻烦。

foo = File.open "bar"
foo.each_line {|l| puts l}

这按预期打印并返回#<File:emails plaintext>

但是,如果我#each_line再次调用同一个对象,则不会发生打印,尽管它仍然返回#<File:emails plaintext>.

为什么File对象的内容被调用覆盖#each_line?我认为类似方法的存在理由#each是确保不会发生突变。这样做的正确“红宝石方式”是什么?

4

1 回答 1

3

你必须倒带它foo.rewind

考虑$stdin.each_line应该如何表现。由于 IO 对象可能是磁盘上的文件,也可能是流或管道,因此保证您可以在其中随机搜索是没有意义的。如果要迭代多次,请将其加载到数组中。

于 2013-04-12T20:11:08.037 回答