2011-06-28 6 views
2

私はRubyが比較的新しいですが、後で使うために変数をキャッチしようとしています。Rubyで後で使うために変数をキャッチ

例:私は、xバックの元の値を取得するにはどうすればよい

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

?私はyを変更したときにxが変わったようです。基本的には、変数の値をキャッチして保持する必要があります。 多くの感謝! AlanR

+1

あなたは*本当に*それをDUPする必要がありますか?私はあなたのプログラムのより大きな文脈を知らないが、変数をdupする必要はほとんどない。式とメソッドの戻り値を賢明に使用すると、中間変数の作成があまりにも多くなることはありません。 –

+0

キャッシュしているのではなく、キャッチしていませんか? –

答えて

4

xのクローンを作成するには、.dupを使用する必要があります。

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 
関連する問題