ruby 循环读取文件之后会关闭文件吗?

Chr*_*ess 1 ruby file-io

用块打开文件之后会关闭它吗?

File.open('test.txt') do |txt|
  ...
end
Run Code Online (Sandbox Code Playgroud)

我想知道在这段代码的末尾是否关闭了此文件,或者我是否仍然应该调用:

File.close()
Run Code Online (Sandbox Code Playgroud)

Aru*_*hit 5

我想知道的是这个文件在这段代码的末尾关闭还是我仍然应该调用:

是的,它是关闭的。IO::open

没有关联的块,IO.open 是 ::new 的同义词。如果给出了可选的代码块,则会将 io 作为参数传递,当代码块终止时,IO 对象将自动关闭。在这种情况下,::open 返回块的值。

f = File.open('doc.txt') do |file|
  file
end

f.closed? # => true
Run Code Online (Sandbox Code Playgroud)

还是我应该继续打电话: File.close() ?

是的,如果您的块file在终止之前返回对象,就像我上面的代码一样,或者如果您将file块内的对象分配给局部变量,如下所示:

f = nil
File.open('doc.txt') do |file|
  f = file
  # your code
end

f.closed? # => true
Run Code Online (Sandbox Code Playgroud)