之后读取文件的ruby循环是否会关闭文件?

时间:2013-11-11 17:29:35

标签: ruby file-io

打开带有块的文件后会关闭吗?

File.open('test.txt') do |txt|
  ...
end

我想知道这段代码是否在这段代码的末尾关闭,或者我是否还应该打电话:

File.close()

2 个答案:

答案 0 :(得分:4)

  

我想知道的是这个文件在这段代码的末尾关闭了,还是我还在打电话:

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

  

没有关联的块,IO.open是:: new的同义词。 如果给出了可选的代码块 ,它将作为参数传递给io,当块终止时, IO对象将自动关闭/ EM> 即可。在这个例子中,:: open返回块的值。

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

f.closed? # => true
  

或者我还应该打电话:File.close() ?

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

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

f.closed? # => true

答案 1 :(得分:1)

如果您想要阅读整个文件,请另外选择:

my_data = File.read('my_file.txt')