为什么这个ruby代码没有按预期工作?

Ano*_*use 1 ruby

我正在研究在ruby中学习一些Hash操作.代码是关于将每件商品的价格提高10%.为什么这段代码不起作用?

restaurant_menu = { "Ramen" => 3, "Dal Makhani" => 4, "Coffee" => 2 }
restaurant_menu.each do |item, price|
  price = price + (price * 0.1)
end
Run Code Online (Sandbox Code Playgroud)

虽然这个做了:

restaurant_menu = { "Ramen" => 3, "Dal Makhani" => 4, "Coffee" => 2 }
restaurant_menu.each do |item, price|
  restaurant_menu[item] = price + (price * 0.1)
end
Run Code Online (Sandbox Code Playgroud)

至于为什么后者比@Mike Manfrin所解释的更好的方式呢?

Mik*_*rin 5

在第一个中,您将局部变量设置为price新价格,然后将其丢弃.item并且price仅限于他们使用的那一行.

在第二个示例中,您设置的变量restaurant_menu存在于每个块之外,因此这些更改将在each块运行完毕后保留.