2011-06-28 39 views
2

我對Ruby比較陌生,但我試圖捕獲一個變量供以後使用。捕捉一個變量以便在以後的Ruby中使用

例子:

x = [1,2,3] 
y = x 
y.reverse! 

我如何獲得X回到原來的價值?當我改變y時,它看起來像x改變了。基本上我需要捕捉並保存一個變量值,同時修改它的一個副本。 非常感謝! AlanR

+1

你真的*需要重複嗎?我不知道你的程序的大背景,但我很少需要重複變量。如果明智地使用表達式和方法的返回值,則可以避免過多的中間變量創建。 –

+0

你的意思是緩存,而不是捕獲? –

回答

4

您需要使用.dup來創建x的克隆。

x = [1,2,3] 
y = x.dup 
y 
6

一些「變異!」方法與等同的非變異形式配對。 (一般情況下,如果這種對存在的,非不同誘變形式的名稱缺乏尾隨!

在這種情況下,並且在任何情況下除非有很好的理由來證明,否則,我建議使用非變異形式。我發現減少副作用可以使代碼更清晰,並且還可以減少這樣的細微問題。 (gsub!可能特別癢)。

>> x = [1,2,3]               
=> [1, 2, 3]                
>> y = x                 
=> [1, 2, 3]                
>> y = y.reverse                
=> [3, 2, 1]                
>> x                  
=> [1, 2, 3] 

快樂的編碼。

4

我同意pst,這是改變原始對象而不是使用函數表達式來創建新的和修改版本的錯誤風格。

y = x.reverse # problem solved 
相關問題