On Mon, Aug 10, 2009 at 5:00 PM, steve<zyzygy / telstra.com> wrote:
> 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 =3D $,, format =3D "%s" )
>>     collect do |item|
>>       sprintf( format, item )
>>     end.join( sep )
>>   end
>>  end
>>
>> An example of the method in action:
>>
>>  rooms =3D 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 =3D $,, format =3D "%s" )". What=
 on
>> earth is going on with the parameters? What do the  sep =3D $, and forma=
t
>> =3D "%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=3D and format=3D i=
ndicate
> the default values for those parameters.  The default value for sep is th=
e
> value of the global variable $,  and the the default format string is "%s=
"
>
> now $, is the default system output separator and is nil unless explicitl=
y
> set
>
> C:\Documents and Settings\Administrator>irb
> irb(main):001:0> puts $,
> nil
> =3D> nil
> irb(main):002:0> %w(a b c d e f g).join
> =3D> "abcdefg"
> irb(main):003:0> $,=3D":"
> =3D> ":"
> irb(main):004:0> %w(a b c d e f g).join
> =3D> "a:b:c:d:e:f:g"
>
> does that make more sense?
>
> Steve
>
>
No idea, but if the implementation of join looks like this, it would

def join by
   reduce{ |s,e| "#{s}#{by||$,}#{e}" }
end

HTH
Robert


--=20
module Kernel
  alias_method :=EB, :lambda
end