我应该在Ruby中的File.read和File.open之后销毁File对象吗?

时间:2014-02-16 13:38:36

标签: ruby file

假设有两种ruby文件操作。

首先,

file = File.open("xxx")
file.close

其次,

file = File.read("xxx")
file.close

众所周知,我们应该在完成使用后关闭文件。但是,在第二个代码块中,Ruby解释器抛出如下所示的错误消息:

in `<main>': undefined method `close' for #<String:0x000000022a3a08> (NoMethodError)

我不需要在第二种情况下使用file.close?我想知道为什么?

2 个答案:

答案 0 :(得分:5)

这是因为File.read方法返回包含文件内容的字符串,而不是File对象。是的,如果您使用close方法,则不需要显式使用File.read,因为ruby会自动为您执行此操作。

答案 1 :(得分:3)

Marek Lipka回答正确,我只是想让你再次指出文档句子。

  

我不需要在第二种情况下使用file.close?

您不需要这样做。

仔细阅读文档IO::read

  

打开文件,可选地寻找给定的偏移量,然后返回长度字节(默认为文件的其余部分)。 read 确保文件在返回前关闭。