我正在研究在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所解释的更好的方法呢?
答案 0 :(得分:5)
在第一个中,您将price
的本地变量设置为新价格,然后将其丢弃。 item
和price
的范围仅限于他们使用过的那一行。
在第二个示例中,您设置的变量restaurant_menu
存在于每个块之外,因此这些更改将在each
块运行完毕后保留。