def to_file(&block)
File.open('/tmp/output_path/to/file', 'w+b') do |file|
file << 'generate your file content here'
yield(file) if block_given?
end
end
现在您可以向#to_file传递一个块,并在文件永久关闭之前对其执行操作。
FileGenerator.new.to_file do |file|
# Attach me to an object or whatever you wish!
# `file` is not closed inside of the block!
end
3条答案
按热度按时间hgc7kmma1#
IO#close
documentation说道:关闭→零
关闭ios并刷新任何挂起的对操作系统的写操作。流不可用于任何进一步的数据操作;如果进行这样的尝试,则引发IOError。
这意味着您无法再次重新打开同一流,因为此时它可能也已关闭了底层文件描述符。
reopen
给你的是,你可以让这个对象指向另一个流/文件。如果你的IO对象绑定到一个常量,但你需要关闭文件并重新打开另一个,这可能很有用。dxxyhpgq2#
File
超类IO
提供了IO#rewind
。这适用于文件等持久化资源,但不适用于真正的流,如管道、ttys和套接字。nnvyjq4y3#
这就是积木的作用!
现在您可以向
#to_file
传递一个块,并在文件永久关闭之前对其执行操作。