hash.update(hash) { |key, value| value * 2}
In particular what is the meaning of the value * 2?
When I tried using IRB to multiply values in a hash, either
I received an error or it multiplied the values and gave me
the product.
For your reference, records indicate that
dreamer <dreamer@panix.com> wrote:
hash.update(hash) { |key, value| value * 2}
In particular what is the meaning of the value * 2?
It means the same thing it would mean anywhere else: multiply the contents
of the “value” variable by 2. Is it really blocks that have you confused,
or the use of the update method? For newer versions of Ruby, the other choice to do the same operation would be the transform_values! method.
When I tried using IRB to multiply values in a hash, either
I received an error or it multiplied the values and gave me
the product.
You show no examples, errors or otherwise. The line you posted should do what I *think* you want, but you many need to explain your intent more completely.
Here is an example I found on stackoverflow (https://stackoverflow.com/questions/5215713/ruby-what-is-the-easiest-method-to-update-hash-values)
h = { 1 => 10, 2 => 20, 5 => 70, 8 =>90, 4 => 34 }
which the writer would like to change to:
h = { 1 => foo(10), 2 => foo(20), 5 => foo(70), 8 => foo(90), 4 => foo(34) }
and the "best" answer was the line above:
hash.update(hash) { |key, value| value * 2 }
My confusion was really about the "value * 2"
"Note that we're effectively merging hash with itself. This is
needed because Ruby will call the block to resolve the merge
for any keys that collide, setting the value with the return
value of the block."
I was wondering why this would be better/different than just doing an
update to the hash and key.
And what is meant by 'resolving the merge
for any keys that collide'.
For your reference, records indicate that
dreamer <dreamer@panix.com> wrote:
That’s just the way the update method works. Its “normal” use is to merge
two different hashes, and the block is only run to resolve the case where there are keys that exist in both. But used against itself, *all* entries will match, and thus be changed by the code in the given block.
Sysop: | Keyop |
---|---|
Location: | Huddersfield, West Yorkshire, UK |
Users: | 285 |
Nodes: | 16 (2 / 14) |
Uptime: | 78:03:40 |
Calls: | 6,489 |
Files: | 12,096 |
Messages: | 5,276,462 |