我有两个问题:1 - 我不明白事物的含义,这段代码返回:
File.open("a.txt") do |i|
puts i
end
Run Code Online (Sandbox Code Playgroud)
请解释一下.
2 - 请解释一下该代码与以下代码之间的区别:
File.open("a.txt").each do |i|
puts i
end
Run Code Online (Sandbox Code Playgroud)
谢谢
附:
File.open( "some_file.txt" ) do |file|
puts file.read
end
Run Code Online (Sandbox Code Playgroud)
open方法使用File实例调用块,并在块返回后清理文件引用,根据需要关闭和刷新文件,这样你的应用程序就不会泄漏文件处理程序,这很棒,因为我们通常忘记关闭文件或执行不考虑文件处理可能会产生异常.
当你这样做时:
file = File.open("some_file.txt")
puts file.read
Run Code Online (Sandbox Code Playgroud)
open方法为您提供了File实例,但现在您负责清理混乱并在不再需要时关闭文件.因此,如果您这样做,您应该将文件设置为开始/救援块,并在出现任何问题时添加一个关闭文件的ensure子句.
除非您有非常特殊的需求,否则您永远不应该使用第二个版本,第一个版本更简单,更安全,您无需关心/清理您对文件所做的任何操作.