> -----Original Message-----
> From: list-bounce / example.com 
> [mailto:list-bounce / example.com] On Behalf Of E. Saynatkari
> Sent: Thursday, March 02, 2006 2:22 PM
> To: ruby-talk ML
> Subject: Re: Confusion Over Keyword Arguments
> 
> 
> Daniel Berger wrote:
> > Yukihiro Matsumoto wrote:
> >> 
> >> 
> >>  foo(1, foo:3)     # (a=1, b={:foo=>3}) or (a=1,b=0,c=[{:foo=>3}])?
> > 
> > Error.  There's no 'foo' parameter.  Passing a literal hash would
> > require {}.
> > 
> >>  foo(1, 2, 8, c:5) # c={:c=>5}) or c=[8,{:c=>5}] or error?
> > 
> > Hm.  Either an error or c = [5], depending on whether or 
> not your want
> > to
> > declare that, once a positional is used, there's no going 
> back after the 
> > fact.
> > 
> >>  args = [1, {:b=>2, foo=>5}]
> >>  foo(*args)        # (a=1,b={:b=>2, foo=>5}) or 
> (a=1,b=2,c=[{:foo=>5}])?
> > 
> > a = 1, b = {:b=>2, foo=>5}, since you've passed a literal hash.
> > 
> > Here's the latest test case we had for Sydney.  Note that Sydney 
> > assumes
> > that
> > all method arguments automatically become keyword 
> arguments.  There's no 
> > syntax
> > for explicitly declaring that a given method parameter is a valid 
> > keyword argument.
> > 
> > For the kids following along at home, also see 
> > 
> http://redhanded.hobix.com/inspect/namedParametersArenTTheyAllNamed.ht
> > ml
> > for
> > further discussion on the subject.
> > 
> > Regards,
> > 
> > Dan
> 
> Slightly off-topic but I found this part curious:
> 
> > # You can use named parameters, using the name of the parameter
> defined in
> > # in the method itself.  It must be the name of the parameter,
> followed by
> > # a colon, followed by the value.  Spaces between the parameter
> name, colon
> > # and value are not allowed.
> 
> Why is this? foo: bar would seem to be more legible with the 
> added benefit of no confusion with the scope operator :: nor Symbols.
> 
> Your testcases do not seem to cover the scope completely and 
> Symbols are not included at all. Maybe add something like
> 
>   def test_corner_cases()
>     # Symbols
>     assert_nothing_raised {@foo.bar x:1, y:2, z::symbol}
> 
>     # Scopes
>     assert_nothing_raised {@foo.bar A::B, y:2, z:3}
>     assert_nothing_raised {@foo.bar x:1, y:2, z:::Object}
> 
>    assert_nothing_raised{ @foo.bar(z:1, x:2, y:3) }
>   end                                      # test_corner_cases
> 
> To cover those.

Yes, I think this is one of the reasons we started leaning towards using
'=' instead.  Maybe we should stick with '=>' - no issues with symbols
or assignment, and people are used to it.

Regards,

Dan