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 > > > > > > > >