gpt4 book ai didi

ruby - 使用 ARGF 处理管道的两种方式之间的区别?

转载 作者:太空宇宙 更新时间:2023-11-03 16:23:20 25 4
gpt4 key购买 nike

使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com