From: Gary Wright Date: 2009-01-17T03:28:00+09:00 Subject: Re: Bloc param parens |memo, (a, b)| On Jan 16, 2009, at 1:01 PM, Tj Holowaychuk wrote: > In Ruby < 1.9 what does this really do? For example I wrote > > class String > def tokenize! hash > hash.inject(self) { |s, (k, v)| s.gsub! /:#{k}/, v } > end > end > > Which has a usage of: > 'Welcome :name, enjoy your :object'.tokenize!({ :name => 'TJ', :object > => 'cookie' }) > > anyways, the inject did not work as desired until I put parens around > the last two parameters, yet I do not entirely understand whats going > here! does this just cause the distribution of the variables to > change? When you enumerate over a hash you get a series of arrays. Each array has two elements: [key, value]. If your inject block only has two arguments defined, the second argument will be an array of two elements. When you insert the parens the second argument is decomposed according to Ruby's multiple assignment rules. Like this: k,v = array[0], array[1] Gary Wright