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