[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

Re: Yet another question on exceptions

Gennady Bystritsky

2/10/2006 4:10:00 PM

File.open is not that stupid ;-). It uses "ensure" internally to close
a file in the case of exception. Using block with open guarantees that
the file will not remain open no matter what.

Gennady.

> -----Original Message-----
> From: Eric Jacoboni [mailto:jaco@neottia.net]
> Sent: Friday, February 10, 2006 8:03
> To: ruby-talk ML
> Subject: Yet another question on exceptions
>
> Hi,
>
> If i use File::open to open/create a file objet, and if i use
> a block with it, the file will be automatically close when
> the block ends:
>
> Now, considering this buggy snippet:
>
> begin
> File.open("my_file") do |fic|
> fic.puts("bla")
> end
> rescue Exception => e
> STDERR.puts(e)
> exit(1)
> end
>
> Here, the "not opened for writing" exception will be raised,
> the block end will never be reached and the file will remain
> opened, isn't it ?
> To circumvent this, i have to make fic a global variable and
> put the appropriate code in a ensure clause (or open a
> begin/ensure in the File.open block to close the file... too bad)
>
> So, my question is: what's the benefit of this idiom versus this one:
>
> begin
> fd = File.new("my_file")
> ...
> rescue Exception => e
> STDERR.puts(e)
> exit(1)
> ensure
> fd.close if fd and not fd.closed?
> end
>
> Is there something i've missed?
> --
> Eric Jacoboni, ne il y a 1442972561 secondes
>
>