loop do
File.open somefile, 'r' do |io|
next
end
end
Does somefile get closed?
How would I test that?
I have the same question if it raises an error (that gets rescued) or
throws a symbol.
Daniel Brumbaugh Keeney
loop do
File.open somefile, 'r' do |io|
next
end
end
Does somefile get closed?
How would I test that?
I have the same question if it raises an error (that gets rescued) or
throws a symbol.
Daniel Brumbaugh Keeney
Daniel Brumbaugh Keeney wrote:
loop do
File.open somefile, 'r' do |io|
next
end
endDoes somefile get closed?
How would I test that?
I have the same question if it raises an error (that gets rescued) or
throws a symbol.Daniel Brumbaugh Keeney
There are two ways to open a file for reading in ruby, the first is:
f = File.open("fred.txt", "r")
f.each do |l|
puts l
end
f.close
in the above case you have to explicitly close the file, however with this:
File.open("fred.txt","r") do |f|
f.each do |l|
puts l
end
end
The opened file is referenced by the variable f, however f is in the scope of the 'File.open() do ... end' and once the program goes past the closing 'end' the f will be removed. The deletion of the file handle triggers the close. So no need for an explicit close.
The second way is also more 'rubyish'.
loop do
File.open somefile, 'r' do |io|
next
end
endDoes somefile get closed?
Yes. See also Peter's explanation.
How would I test that?
Easily:
robert@fussel ~
$ echo 1 > x
irb(main):001:0> io = nil
=> nil
irb(main):002:0> File.open("x") {|io| p io, io.closed?}
#<File:x>
false
=> nil
irb(main):003:0> p io, io.closed?
#<File:x (closed)>
true
=> nil
I have the same question if it raises an error (that gets rescued) or
throws a symbol.
irb(main):004:0> File.open("x") {|io| p io, io.closed?; raise "E"}
#<File:x>
false
RuntimeError: E
from (irb):4
from (irb):4:in `open'
from (irb):4
irb(main):005:0> p io, io.closed?
#<File:x (closed)>
true
=> nil
Cheers
robert
On 15.02.2008 14:39, Daniel Brumbaugh Keeney wrote:
from :0