在 Ruby 中,为什么变量在代码块中不能互换?

In Ruby, why aren't variables not interchangeable within code blocks?

我有一个名为 "file1.txt" 的文件:

Ruby
programming
is fun

在我从 IRB 调用的 files.rb 中,我有:

File.open('file1.txt', 'r') do |file|
  while  line = file.gets
    puts "** " + line.chomp + " **" #--> why can't I use file.gets.chomp?
 end
end

为什么 linefile.gets 在第 3 行不能互换?如果我将 line 切换为 file.gets,该功能将不起作用,考虑到

我有点困惑
line = file.gets

file.gets = line

应该可以互换,但在这种情况下,它不是因为它给我一个错误。该函数适用于 line.chomp.

我尝试去掉 while 代码块,只写

puts file.gets

似乎从file1.txt输出了一行代码,但在第3行的while语句中不起作用。

我不是很喜欢 Ruby,但我认为这是因为如果你使用 while line = file.getsfile.gets return 一行并读取(并复制到缓冲区)下一行。在最后一次迭代中,while 在最后一行,while line = file.gets 将 return 最后一行。但是此时,您再次调用 file.gets,由于文件中没有更多行,因此 return 出错。

这是未经测试的,但您的代码可以简化为:

File.foreach('file1.txt') do |line|
  puts "** " + line + " **"
end