RGSS2を知る(11)
マニュアルに「返される値はコピーではなく参照だから、値を変更すれば反映される」というようなことが書いてある。
気になったからもう少し調べてみた。
さっきの「←ここ」をこのように変えると、
s.tone.gray = g # ←ここ
確かに色が変わるようになった。
以下のコードは、
t = Tone.new(0,0,0,0) s = Sprite.new s.tone = t p s.tone.equal?(s.tone)
trueとなる。
つまり、プロパティ参照時に生成しているという認識は誤りで、代入時に生成しているのだ。たぶん。
Rubyの参照についてよくわかってない人だと、同じオブジェクトをあちこちに設定して、1つの値を変えたら全部変わっちゃった!とかありそうだから、これはこれでいいのかもしれない。ていうかこのほうがよさそうだ。
しかしこの場合、tone=で代入するのではなくset_toneとかのメソッドにするとか、なんしか違う形にしないとインスタンス変数のセッターにしか見えない。