Hi,
busy with my script, I am trying to print my hash, which is built up as
follows:
hash:
key = A, value = [1,2,3]
key = B, value = [4,5,6]
etc.
I try this:
@h.each do |key,value|
print key, " is ", value.each {|x| print x, " -- " }, "\n"
The print is strange, becuase it looks like this now:
1 -- 2 -- 3 -- A is 123
4 -- 5 -- 6 -- B is 456
I don't understand why. If I interpreted this correctly, I've got the
following two questions:
1. How come the code block is executed first
2. After that the key and value is printed, however, I don't see the
print for the values here (except for the print in de the code block,
which was executed already).
I think what you want to actually do is:
@h.each do |key,value|
print key, " is ", value.join(' -- '), "\n"
end
or
@h.each do |key,value|
puts key, " is ", value.join(' -- ')
end
To hopefully answer your questions:
You have asked Ruby to print out the return value of value.each{...},
which is simply value:
[1,2,3] == [1,2,3].each {|n| do_something_with_n_if_you_like(n)}
So that explains the 123 at the end of the line, because [1,2,3].to_s is
"123"
Why the "1 -- 2 -- 3" before everything else though? Well, _before_ Ruby
can execute that first "print", it must _first_ evaluate what is being
printed, just as if you had writen "print 1+2+3". In calculating that,
Ruby calls values.each {...}, and this prints out the "1 -- 2 -- 3" at
the start of the line.
Hope that helps.