将打开的文件对象传递给函数作为参数



为什么在Ruby中读写文件时不能工作?

def write_to_file(a_file)
a_file.puts("hello")
end
a_file = File.new("test.txt", "w")
write_to_file(a_file)

我发现的替代方法是将文件名传递给每个读取或写入它的函数,并在该函数中打开和关闭它。

为什么我不能打开文件并将打开的文件对象传递给函数?我分配的a_file变量不创建文件对象吗?

File.new确实创建了一个文件,但它以缓冲模式(或非同步模式)打开,除非filename是一个tty。如果您想打开一个文件并向其写入内容,惯用的方法是:

File.open("test.txt", "w") do |file|
file.write("hello")
end

这确保在您完成时关闭文件。该文件处理程序可以随意传递:

def write_to_file(file)
file.write("hello")
end
File.open("test.txt", "w") do |file|
write_to_file(file)
end

最新更新