Thanks Jeremy and Simon,

Things are clear to me now.

Although very unlikely, it seems Kroeger Simon (ext) stated on Sep 22 that :

>
> There are two ways to use File.open:
>  1) the one you may be familiar with, like
>
> my_file = File.open("songdata")
> s = my_file.read
> my_file.close
>
>  2) the second that takes a block
>
> File.open("songdata") do |my_file|
>   s = my_file.read
> end
>
> #open calls the block only one time (there is
> nothing to iterate here) passing in the file object
> it would have returned if called without the block.
>
> Why? because it's a nice way of resource handling.
> After calling the block #open closes the file. You
> can't forget to call close.
>
> cheers
>
> Simon
>
> > -----Original Message-----
> > From: Jurgen Stroo [mailto:blurg / JurgenStroo.com]
> > Sent: Thursday, September 22, 2005 10:16 AM
> > To: ruby-talk ML
> > Subject: Argument passing with |boofar| (fwd)
> >
> > Lo Fellow listers,
> >
> > I already mentioned I am starting to learn Ruby the last
> > couple of days.
> > I came across the following in the Prog. Ruby book:
> >
> > File.open("songdata") do |song_file|
> >   songs = SongList.new
> >   song_file.each do |line|
> >       file, length, name, title = line.chomp.split(/\s*|\s*/)
> >     songs.append(Song.new(title,name,length))
> >   end
> >   puts songs[1]
> > end
> >
> > I previously read about the argument passing between methods and code
> > blocks. They used explanations of this construct which were
> > indeed clear
> > to me:
> >
> > ('a'..'e').each {|char| print char}
> >
> > this each method is of course iterating over the list and
> > returning the
> > value each time for each list entry, which is passed as the variable
> > 'char' in the block. (correct me if I'm wrong)
> >
> > But, in the case of:
> >
> >   File.open("songdata") do |song_file|
> >
> > what is returned then? I mean, the File.open is just a
> > statement without a
> > return value, or isn't it?
> >
> > I hope someone can explain me the inner workings of the given example
> > which is not clear to me.
> >
> > Many thanks,
> > Jurgen
> >
> >
> >
>
>