在ruby中的函数中获取.chomp

在ruby中的函数中获取.chomp,ruby,function,learn-ruby-the-hard-way,Ruby,Function,Learn Ruby The Hard Way,我正在经历“艰苦地学习Ruby”,在练习20中有一段代码我不理解。我不明白为什么在函数“print_a_line”中对f调用get.chomp 因此,我不明白输出的第二部分是如何产生的。我知道是test.txt文件的前3行被传递到了代码中,但我不明白f.get.chomp是如何产生这个结果的 $ ruby ex20.rb test.txt First let's print the whole file: This is line 1 This is line 2 This is line 3

我正在经历“艰苦地学习Ruby”,在练习20中有一段代码我不理解。我不明白为什么在函数“print_a_line”中对f调用get.chomp

因此,我不明白输出的第二部分是如何产生的。我知道是test.txt文件的前3行被传递到了代码中,但我不明白f.get.chomp是如何产生这个结果的

$ ruby ex20.rb test.txt
First let's print the whole file:
This is line 1
This is line 2
This is line 3
Now let's rewind, kind of like a tape.
Let's print three lines:
1, This is line 1
2, This is line 2
3, This is line 3

如果您查看for
IO#get
,您将看到它从IO对象读取下一行。您正在调用的
Kernel#open
方法将返回具有该方法的IO对象。
#get
方法实际上是将您推进到下一行的方法。它与读取该行返回的字符串上的
#chomp
无关。

文件对象
f
跟踪(它引用的东西跟踪)它在文件中读取的位置。将其视为在读取文件时前进的光标。当您告诉
f
to
get
时,它将一直读取,直到到达新行。它们的关键是
f
记住您所在的位置,因为读取使“光标”前进。
chomp
调用根本不进入该部分。因此,每次调用
f.get
只读取文件的下一行并将其作为字符串返回

chomp
仅操作由
f.get
返回的字符串,对文件对象没有影响


编辑:完成回答:
chomp
返回删除尾随换行符的字符串。(从技术上讲,它删除了记录分隔符,但这与换行符几乎没有什么不同。)这来自Perl(AFAIK),其思想是基本上您不必担心您获取输入的特定形式是否向您传递换行符。

f
是输入文件对象,因此
f.get
()从文件读取,直到遇到换行符(
\n
)为止(就像从STDIN读取,直到用户点击return)。将读取换行符,但仅此而已
chomp
chomp去掉了换行符。我可能在我原来的帖子中不太清楚。我不清楚f.get.chomp是如何通过传入脚本的test.txt文件中的行递增的。我知道当前的_行是如何递增的,但我不知道当前的_文件是如何递增以读取每一行的。我怀疑这与gets.chomp有关,但我不清楚两者之间的关系,如果有的话?非常感谢你的解释。它确实帮助我从概念上理解正在发生的事情。
$ ruby ex20.rb test.txt
First let's print the whole file:
This is line 1
This is line 2
This is line 3
Now let's rewind, kind of like a tape.
Let's print three lines:
1, This is line 1
2, This is line 2
3, This is line 3