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?
···
--
Posted via http://www.ruby-forum.com/.
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
···
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?
Thanks for the reply! I get it now, just never really took the time to
check that stuff out
def test &block
yield 1, [2, 3]
end
test do |a, b, c|
p a
p b
p c
end
puts
test do |a, (b, c)|
p a
p b
p c
end
that demonstrated it pretty well
···
--
Posted via http://www.ruby-forum.com/.