Rubyで、
変数を『=』で結ぶ時?に、単純な値の代入ではなく
『変数同士を同じものとして扱い、片方を変更すると、もう片方の変数の値も変更されてしまう』
……のような記述を過去見たような気がします。。
Ruby
1 d = [3, 1, 4] 2 c = d #cをdをしてみなす? 実際はcに代入しているだけの様子 3 4 p c #=>[3, 1, 4] 5 p d #=>[3, 1, 4] 6 7 c = [1, 5, 9] #cをdとみなしているので、dの値も変更される? 実際はcに代入しているだけの様子 8 9 p c #=>[1, 5, 9] 10 p d #=>[3, 1, 4] #[1, 5, 9]となる場合がある?
軽く試してみましたが、予想通りと言うか通常の代入になりました。
『●●を〇〇としてみなす』式の書き方や、そうなってしまう条件(?)
これと勘違いしているんじゃないか?等、何かありましたら教えてください。
ただの勘違いだったらすみません。
よろしくお願い致します。
■■6/22 15:10追記■■
破壊的メソッドはオブジェクト自身を変更するメソッドで
破壊的でないメソッドは結果のみを返し、代入(=)がある場合はその結果(返り値)のオブジェクトを新規作成し(?)、再代入する。
配列ではなく、単純な値(c = 1のような)の場合、
内部では、1が入っているオブジェクトを作成し、cはそこを参照しているだけ。(Cに1が入っているわけではない)
何かしらの方法でオブジェクトそのものの値を変更すれば、『puts c』の結果も変わる。
d = c とすればcとdは同じ所を参照する事になるが、
『c = c * 3』のような計算式(この場合『*』?)は、破壊的メソッドではないため、
結果である『3』を返し、新規オブジェクト『3』を作成し、cはそこのアドレスを参照しにいく。
それはdの参照とは関係がないため、dは『1』が入っているオブジェクトを参照したままで『puts d』は『1』のままである。
**単純な値の場合、破壊的メソッドがないため(?自信ない。。)**変数そのものに値が入っているように見えてしまう。
こんな感じでしょうか?
なんとなくは分かったのですが、
・=がある場合、新規オブジェクトを勝手に作っている?
・計算式は破壊的メソッドになる事はない?
・単純な値の場合、実質見た目が連動する事はない?
細かい所が詰め切れません。
以上3点が知りたいです。また明後日な事を言っていたら突っ込み頂けると助かります。
回答3件
あなたの回答
tips
プレビュー