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

ruby - passing open file object to function as parameter

提问人:Ivan Lendl 提问时间:4/28/2022 最后编辑:ChrisIvan Lendl 更新时间:4/29/2022 访问量:207

问:

为什么在 Ruby 中读取和写入文件时不起作用?

def write_to_file(a_file)
    a_file.puts("hello")
end

a_file = File.new("test.txt", "w")
write_to_file(a_file)

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

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

红宝石 文件 io

评论

0赞 Stefan 4/28/2022
您展示的代码运行良好。也许您忘记关闭文件,因此输出仍在缓冲中?致电后尝试a_file.closewrite_to_file

答:

2赞 max 4/28/2022 #1

File.new确实创建了一个文件,但它在缓冲模式(或非同步模式)下打开,除非文件名是 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