From: steve Date: 2009-08-11T00:00:08+09:00 Subject: Re: Newbie has trouble understanding a Why example Ca Josephson wrote: > I'm just learning ruby, so I am working my way through 'Why's Poignant > Guide to Ruby' > > I'm on the 5th chapter, and I came across this example: > > class ArrayMine < Array > # Build a string from this array, formatting each entry > # then joining them together. > def join( sep = $,, format = "%s" ) > collect do |item| > sprintf( format, item ) > end.join( sep ) > end > end > > An example of the method in action: > > rooms = ArrayMine[3, 4, 6] > print "We have " + rooms.join( ", ", "%d bed" ) + " rooms available." > > Which prints, “We have 3 bed, 4 bed, 6 bed rooms available.” > > I'm confused by the line "def join( sep = $,, format = "%s" )". What on > earth is going on with the parameters? What do the sep = $, and format > = "%s" do? If I modify that line to "def join( sep, format)", the same > thing prints out. So why are $, and %s used? What do they do? Its a little confusing. In the method definition, sep= and format= indicate the default values for those parameters. The default value for sep is the value of the global variable $, and the the default format string is "%s" now $, is the default system output separator and is nil unless explicitly set C:\Documents and Settings\Administrator>irb irb(main):001:0> puts $, nil => nil irb(main):002:0> %w(a b c d e f g).join => "abcdefg" irb(main):003:0> $,=":" => ":" irb(main):004:0> %w(a b c d e f g).join => "a:b:c:d:e:f:g" does that make more sense? Steve