困った時の自分用メモ

読んだ本を考察してメモったり、自分でいじった物の感想をメモったりする場。週1更新を目指します。

Luaの話~オブジェクトと参照渡し~

以下のようなコードで詰まった。

-- クラス定義
-- 2点を表すオブジェクト
Vector2 = {}

-- コンストラクタ
function Vector2.new(x, y)
    local this = {
        x = x,
        y = y
    }

    -- メソッド定義
    --this.Function = function()
    --end

    return this
end

    TablePos = Vector2.new(100, 100)--定数扱いにする物と思ってくれていい
    BasePos = TablePos--ベース値。基準にしたいので、編集しないようにしたい
    WorkPos = TablePos--作業値。
    UnityDebugLog(BasePos.x)--100
    UnityDebugLog(WorkPos.x)--100
    
    WorkPos.x = 90--作業用のデータを書き換え
    UnityDebugLog(BasePos.x)--90!!!!!
    UnityDebugLog(WorkPos.x)--90

 

冷静に考えれば、オブジェクトの参照をお互い持っているわけで、その同じ物を指している物を書き換えるのだから

書き換えた先の物は同じ物を見ているわけで当然だと思えるだろう。

 

ただ、TablePosが関数の引数として渡されて、それを保持する時に結構詰まった。
その場合は、BasePosに該当する側は、新しいVector2オブジェクトを生成しないとダメ。