metatable 的字段和方法在 setmetatable 后的表格上不可见

这是 Pico-8 lua。我有以下函数,在标记的 assert 处失败。我不理解这是如何发生的。我已经在其他两个场合使用了 setmetatable 并且它在那里工作正常。在这里,我一无所知。

function particle:new(o)
    setmetatable(o, self)
    assert(self.spd, "works")
    assert(getmetatable(o).spd, "works")
    assert(o.spd, "this fails") -- < this assert fails, the ones above succeed
    add(anims,o)
end

原文链接 https://stackoverflow.com/questions/70323947

点赞
stackoverflow用户2858170
stackoverflow用户2858170

看起来你忘记了

self.__index = self

如果没有这句代码, o.spd 将不会引用到 particle.spd,如果 o.spd 是 nil 的话。

2021-12-12 13:55:31