捕获变量以供以后在Ruby中使用

时间:2011-06-28 23:46:50

标签: ruby

我对Ruby比较陌生,但我想抓一个变量供以后使用。

示例:

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

如何获取x的原始值?当我改变y时,看起来x变了。基本上我需要在改变它的副本时捕获并保持变量值。 非常感谢! AlanR

3 个答案:

答案 0 :(得分:6)

一些“变异!”方法与等效的非变异形式配对。 (通常,如果存在这样的一对,则非变异形式在名称中缺少尾随!。)

在这种情况下,并且在每种情况下除非有充分的理由证明是合理的,否则我建议使用非变异形式。我发现减少副作用会使代码更清晰,并且还可以减少像这样的细微问题。 (gsub!可能特别icky。)

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

快乐的编码。

答案 1 :(得分:4)

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

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

答案 2 :(得分:4)

我同意pst,改变原始对象而不是使用函数表达式创建新版本和修改版本是不好的风格。

y = x.reverse # problem solved