File.open()有没有块有什么区别?

ami*_*mir 3 ruby file-io file

我有两个问题:1 - 我不明白事物的含义,这段代码返回:

File.open("a.txt") do |i|
  puts i
end
Run Code Online (Sandbox Code Playgroud)

请解释一下.

2 - 请解释一下该代码与以下代码之间的区别:

File.open("a.txt").each do |i|
  puts i
end
Run Code Online (Sandbox Code Playgroud)

谢谢

Mau*_*res 6

附:

File.open( "some_file.txt" ) do |file|
  puts file.read
end
Run Code Online (Sandbox Code Playgroud)

open方法使用File实例调用块,并在块返回后清理文件引用,根据需要关闭和刷新文件,这样你的应用程序就不会泄漏文件处理程序,这很棒,因为我们通常忘记关闭文件或执行不考虑文件处理可能会产生异常.

当你这样做时:

file = File.open("some_file.txt")
puts file.read
Run Code Online (Sandbox Code Playgroud)

open方法为您提供了File实例,但现在您负责清理混乱并在不再需要时关闭文件.因此,如果您这样做,您应该将文件设置为开始/救援块,并在出现任何问题时添加一个关闭文件的ensure子句.

除非您有非常特殊的需求,否则您永远不应该使用第二个版本,第一个版本更简单,更安全,您无需关心/清理您对文件所做的任何操作.