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

时间:2015-06-08 18:48:51

标签: 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

虽然这个:

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

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

1 个答案:

答案 0 :(得分:5)

在第一个中,您将price本地变量设置为新价格,然后将其丢弃。 itemprice的范围仅限于他们使用过的那一行。

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