只是思考一下关闭我在代码中明确打开的文件的必要性。我来自 C 和 C++ 编程背景,并开始在 Ruby 中导航。提前感谢您的反馈。
from_file, to_file = ARGV
script = $0
puts "Copying from #{from_file} to #{to_file}"
File.open(to_file, 'w').write(File.open(from_file).read())
puts "Alright, all done."
除非您使用类似with
python 中的语句,否则不关闭文件总是不好的做法。
虽然脚本语言通常会在退出时关闭打开的文件,但在您完成文件后立即执行此操作会更干净——尤其是在写入文件时。
显然Ruby 有一些类似于 python 的东西with
:
File.open(from_file, 'r') do |f_in|
File.open(to_file, 'w') do |f_out|
f_out.write(f_in.read)
end
end
相关文档:http ://ruby-doc.org/core-1.9.3/File.html#method-c-open
这是一个较短的版本:
File.write to_file, File.read(from_file)
此代码 (Matheus Moreira) 自动关闭文件:
File.write to_file, File.read(from_file)
此代码中无法关闭文件:
File.open(to_file, 'w').write(File.open(from_file).read())
我猜也自动关闭。
这是一个很好的答案,但将输出文件放在外部块上并使用 << 更“红宝石”:
File.open(to_file, 'w') do |f_out|
f_out << File.open(from_file){|f| f.read}
end
请注意阅读时如何不需要'r'。