On 30.08.2006 02:23, Eero Saynatkari wrote:
> Brian Buckley wrote:
>> The code below works but I do not understand the  "(key, value)"
>> parenthesis syntax.  I have not seen it before.  Could someone
>> explain?
>>
>> --Brian
>>
>> (from Rails' active_support)
>> class Hash
>> def symbolize_keys
>>    inject({}) do |options, (key, value)|
> 
> Hash#each, as you may know, actually produces an Array
> of Arrays (key-value pairs). Here what is being passed
> is actually one of those pairs--the parenthesised syntax
> uses Ruby's assignment rules and splats the Array to
> two distinct variables. Consider it the same as:
> 
>  key, value = ['key', 'value']

The mechanism at work here is a more general pattern matching which also 
is done for regular assignments:

 >> (a,(b,c),d,(e,(f,g))) = 1,[2,3],4,[5,[6,7]]
=> [1, [2, 3], 4, [5, [6, 7]]]
 >> a
=> 1
 >> b
=> 2
 >> c
=> 3
 >> d
=> 4
 >> e
=> 5
 >> f
=> 6
 >> g
=> 7

Works also with the star operator:

 >> (a,(b,c),d,(e,(f,*g))) = 1,[2,3],4,[5,[6,7,8]]
=> [1, [2, 3], 4, [5, [6, 7, 8]]]
 >> g
=> [7, 8]

Kind regards

	robert