0

値を割り当てているキーは、戻った後も nil のままです!

p = {};
for i = 0, 1000 do
    p[ i ] = {};
end

t = {}
t.__index = t

function new()
    local o = setmetatable({}, t)


    for key, value in pairs( p[1] ) do
        print(key .. " : " .. value)
        o[ key ] = value
    end

    t.__newindex = function(t, key, value)
        if type(value) ~= "function" then
          p[1][key] = value
        end
    end


    return o
end

local something = new()

something.xxx = 666
print(p[1].xxx)

local something = new()
print(something.xxx)
print(p[1].xxx)

問題はそれにあります:

for key, value in pairs( p[1] ) do
    print(key .. " : " .. value)
    o[ key ] = value
end

xxx : 666 と表示されますが、返却しても o[ key ] は nil のままです。出力は

666
xxx : 666
nil
666

編集:ええ、私は今気づきました。ネット帯域幅のため、後で賛成票を投じます(javascriptでstacを実行できません)ありがとう、今は動作します。前のオブジェクトに基づいて新しいオブジェクトを作成しました。

4

2 に答える 2

0

o[ key ] = valueメタメソッドを呼び出しnewindexます。ただし、まだ設定していないため、デフォルトのアクションが実行されます。のテーブルをインデックスに設定しvalueています。okey

もちろん、メタメソッドはのテーブルindexに何があるかは気にしません。oそれは自分自身を見ています。したがって、あなたの後o[key]で、 のメタテーブルを調べますが、key見つかりません。

このコードが何を達成しようとしているのかは不明です。

于 2013-08-19T12:33:35.393 に答える