Getting different results using Ruby IRB and files on method merge/code block

When I run these two Ruby scripts I got two different answers. Also, if
I run the first script on irb, I get the same result as the second
script (and I know the results on second script and irb are correct). Am
I missing something on the first script? Thanks.

Ruby version: 1.9.3
Text Editor: TextWrangler

h1 = {"n1"=> 00, "n2"=> 44}
h2 = {"n2"=> 66, "n3"=> 88}

#first script -- Results: {"n1"=>0, "n2"=>66, "n3"=>88}

puts h1.merge(h2) do |key, old, new|
  if old < new
     old
  else
     new
  end
end

# second script -- Results: {"n1"=>0, "n2"=>44, "n3"=>88}

puts h1.merge(h2) {|key,old,new| old < new ? old : new}

···

--
Posted via http://www.ruby-forum.com/.

Seems to be a precedence issue:

first example behaves like puts(h1.merge(h2)) do ... end
second example behaves like puts(h1.merge(h2) {...})

It has nothing to do with the block itself, this works fine:

merged = h1.merge(h2) do |...|
            ...
          end
puts merged

···

Am 28.09.2012 22:18, schrieb Carlos da Silva:

When I run these two Ruby scripts I got two different answers. Also, if
I run the first script on irb, I get the same result as the second
script (and I know the results on second script and irb are correct). Am
I missing something on the first script? Thanks.

Ruby version: 1.9.3
Text Editor: TextWrangler

h1 = {"n1"=> 00, "n2"=> 44}
h2 = {"n2"=> 66, "n3"=> 88}

#first script -- Results: {"n1"=>0, "n2"=>66, "n3"=>88}

puts h1.merge(h2) do |key, old, new|
   if old < new
      old
   else
      new
   end
end

# second script -- Results: {"n1"=>0, "n2"=>44, "n3"=>88}

puts h1.merge(h2) {|key,old,new| old < new ? old : new}

--
<https://github.com/stomar/&gt;

Thanks. it makes sense.

···

--
Posted via http://www.ruby-forum.com/.