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とかのメソッドにするとか、なんしか違う形にしないとインスタンス変数のセッターにしか見えない。