- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
使用 ARGF,我可以创建尊重管道的 Ruby 程序。假设,我要不断阅读新条目:
$ tail -f log/test.log | my_prog
我可以使用:
ARGF.each_line do |line|
...
end
此外,我还找到了另一种方法:
while input = ARGF.gets
input.each_line do |line|
...
end
end
看起来,这两种变体做同样的事情还是它们之间有区别?如果是这样,它是什么?
提前致谢。
最佳答案
正如 Stefan 所说,您在第二种情况下犯了一个小错误。在您的案例中使用“ARGF.gets”方法的正确方法如下:
while input = ARGF.gets
# input here represents a line
end
如果你像上面那样重写第二个例子,你将不会有行为上的差异。
您可能会注意到 ARGF#gets
之间的实际差异和 ARGF#each_line
在语义上:each_line
接受 block 或返回枚举数,gets
返回可用的下一行。
另一种选择是使用 Kernel#gets
.请注意,在某些情况下,它的行为可能与 ARGF#gets
不同,尤其是当您更改分隔符时:
A separator of nil reads the entire contents, and a zero-length separator reads the input one paragraph at a time, where paragraphs are divided by two consecutive newlines.
但要不断地从标准输入读取(然后打印),您可以按如下方式使用它:
print while gets
关于ruby - 使用 ARGF 处理管道的两种方式之间的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29895305/
这个问题已经有答案了: Why is gets throwing an error when arguments are passed to my ruby script? (2 个回答) 已关闭 8
使用 ARGF,我可以创建尊重管道的 Ruby 程序。假设,我要不断阅读新条目: $ tail -f log/test.log | my_prog 我可以使用: ARGF.each_line do |
ARGF.set_encoding说: If single argument is specified, strings read from ARGF are tagged with the enco
ARGF.each_with_index do |line, idx| print( "[#{idx}] #{line} x: " ); indent = Indent
我试图让我的代码能够接受来自命令行输入的多个日志文件,以根据不同的分隔符进行解析,并接受命令来解析某个日志文件的所有步骤。 它目前一次只能接受一个命令,它解析的日志文件是在代码中确定的,而不是变量@l
在 Ruby 1.9 中,我如何从 ARGF 中读取 CSV? 我尝试了以下方法,但没有打印任何内容: require 'csv' CSV(ARGF).read do |row| p row
我想像这样处理ARGF。 # file.rb if ARGF.??? puts ARGF.read else puts "no redirect." end $ echo "Hello wor
在 Ruby 1.8.7 中,the documentation不在类和模块下列出 ARGF,并且 ARGF 不是类或模块: ARGF.class # => Object 在 Ruby 1.9.3 中
我使用 GLI 2.0 gem 创建了自己的 gem对于所有漂亮的命令行结构。它工作正常,但我还想支持管道输入的数据。 my_prog new some_file # this is ok alrea
我是一名优秀的程序员,十分优秀!