0

当我运行这两个 Ruby 脚本时,我得到了两个不同的答案。此外,如果我在 irb 上运行第一个脚本,我会得到与第二个脚本相同的结果(并且我知道第二个脚本和 irb 上的结果是正确的)。我在第一个脚本上遗漏了什么吗?谢谢您的帮助。

红宝石版本:1.9.3

文本编辑器:TextWrangler

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

第一个脚本——结果:{"n1"=>0, "n2"=>66, "n3"=>88}

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

第二个脚本——结果:{"n1"=>0, "n2"=>44, "n3"=>88}

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

1 回答 1

1

在第一种情况下,Ruby 认为块属于puts,而不是merge使用{}

p h1.merge(h2) { |key, old, new|
  if old < new
   old
  else
   new
  end
}

更新:您可以在Programming Ruby书中找到详细信息。

于 2012-09-28T16:37:23.190 回答