2015-06-08 127 views
1

我正在學習一些紅寶石哈希操作。代碼是關於增加每個項目的價格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

另一個Ruby問題是由於誤解了對象變異的作用而產生的。 – Ajedi32

+0

你可以解釋或給一些鏈接,所以我可以理解Ruby中的對象變異。我想回答這個問題,然後回答。@ Ajedi32 –

+0

這實際上就是我爲什麼提到它的原因;我不知道解釋這個概念的典型來源。 – Ajedi32

回答

5

在第一個中,您將本地變量price設置爲您的新價格,然後將其丟棄。 itemprice僅限於它們使用的那一行。

在第二個示例中,您將設置一個變量restaurant_menu,該變量位於每個塊的外部,因此這些更改將在each塊完成運行後繼續存在。

+0

@ MikeManfrin.That很快,但不應該寫在其本地範圍內的價格寫入其全局父對象? –

+0

@ Anony-mouse我得到你想說的,但是沒有像「全局父對象」那樣的東西。 Ruby不會那樣工作。你有沒有一個語言的例子? – Ajedi32

+0

@ Ajedi32.謝謝你解釋我說的。但是這種方式比第一種方式有什麼優點? –

相關問題