From: "Kroeger Simon (ext)" Date: 2005-09-22T17:31:03+09:00 Subject: Re: Argument passing with |boofar| (fwd) 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 > > >