(On Mac OS X 10.4.5, Ruby 1.8.4)
Okay, so:
[1, 2, 3].inject(0) { |s, v| s += v }
=> 6
and:
[1, 2, 3].inject([]) { |a, v| a << v**2 }
=> [1, 4, 9]
but:
[1, 2, 3].inject({}) { |h, v| h[v] = v**2 }
=> NoMethodError: undefined method `[]=’ for 1:Fixnum
What gives?
I’ve tried replacing {} with Hash.new and a couple other variants
without luck.
Hey Matthew,
observe:
irb(main):001:0> [] << 100
=> [100]
irb(main):002:0> {}[:something] = 100
=> 100
The << operator on an array returns the array, while the [] operator
on a hash returns the value you assigned.
And the result of the last statement in your inject block will
replace the value for your memo on each iteration.
So… just make sure the last statement in your inject block is the
memo value you are accumulating:
[1,2,3].inject({}) { |memo, val| memo[val] = val**2; memo}
HTH,
Trevor
Trevor S.
http://somethinglearned.com
Okay, I feel silly now. Thanks for the reminder on basic assignment
protocol. =)