在 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
为什么 line
和 file.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.gets
,file.gets
return 一行并读取(并复制到缓冲区)下一行。在最后一次迭代中,while 在最后一行,while line = file.gets
将 return 最后一行。但是此时,您再次调用 file.gets
,由于文件中没有更多行,因此 return 出错。
这是未经测试的,但您的代码可以简化为:
File.foreach('file1.txt') do |line|
puts "** " + line + " **"
end
我有一个名为 "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
为什么 line
和 file.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.gets
,file.gets
return 一行并读取(并复制到缓冲区)下一行。在最后一次迭代中,while 在最后一行,while line = file.gets
将 return 最后一行。但是此时,您再次调用 file.gets
,由于文件中没有更多行,因此 return 出错。
这是未经测试的,但您的代码可以简化为:
File.foreach('file1.txt') do |line|
puts "** " + line + " **"
end