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

时间:2016-10-22 00:48:31

标签: ruby file irb

我有一个名为“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

第3行为什么linefile.gets不可互换?如果我用line切换file.gets,该功能不起作用,考虑到这一点,我有点困惑

line = file.gets

file.gets = line

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

我尝试删除while代码块,只需编写

puts file.gets

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

2 个答案:

答案 0 :(得分:1)

我并不真正进入 Ruby ,但我认为这是因为如果您使用while line = file.getsfile.gets会返回一行并读取(并复制到缓冲区)下一个。在最后一次迭代中,while位于最后一行,while line = file.gets将返回最后一行。但是在那段时间里,你再次调用file.gets,因为文件中没有其他行,它会返回错误。

答案 1 :(得分:1)

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

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