したがって、どうやらルビーはパスバイ参照言語のようです。
$ irb --simple-prompt
>> @foo=1
=> 1
>> @bar=2
=> 2
>> @foo.object_id
=> 3
>> @bar.object_id
=> 5
>> [@foo,@bar].each {|e| puts e.object_id }
3
5
=> [1, 2]
つまり、構築された配列とブロックの両方が、元のクラス インスタンス変数オブジェクトへの参照を処理しているように見えます。
ただし、これらの参照は、書き込みを試みるとすぐにコピーを作成するようです。
>> [@foo,@bar].each {|e| puts e+=1 }
2
3
=> [1, 2]
>> @foo
=> 1
>> @bar
=> 2
>> [@foo,@bar].map! {|e| e+1 }
=> [2, 3]
>> @foo
=> 1
>> @bar
=> 2
関数を介して変換する必要があるクラスインスタンス変数オブジェクトがいくつかあったので、参照渡しを利用してキーストロークを節約し、次のようにすることにしました。
[@var1, @var2, @var3].map! {|v| my_function(v) }
しかし、このコピーオンライトが進行しているように見えるため、機能していないようです。
オフにする方法はありますか?コードを DRY と効率の両方を同時に維持しながら、どのように私を達成しますか?