0

返回后我分配值的键仍然为零!

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 ] 仍然保持为零。输出是

666
xxx : 666
nil
666

编辑:是的,我刚刚意识到。由于网络带宽(无法使用 javascript 运行 stac),我稍后会给你投票。谢谢,现在它可以工作了。根据前一个对象创建新对象。

4

2 回答 2

0

o[ key ] = value将调用元newindex方法。但是由于您还没有设置它,它会执行默认操作。这是在索引处设置valueinto的表。okey

当然,元index方法不会关心o' 表中的内容;它在看自己。因此,您稍后o[key]将在元表中查找key,它不会找到。

目前尚不清楚这段代码试图完成什么。

于 2013-08-19T12:33:35.393 回答
0

您将__index新表的元方法设置o为 t,其中仅包含__index__newindex,其中没有一个等于xxx,因此查找失败并返回nil。你可能想说t.__index = p相反。

于 2013-08-19T12:35:43.193 回答