metatable 的字段和方法在 setmetatable 之后的 table 上不可见

Fields and methods of metatable are not visible on table right after setmetatable

这是 Pico-8 lua。我有以下函数,它在标记的断言处失败。我不明白这是怎么发生的。我在其他两个场合使用过 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

你好像忘记了

self.__index = self

没有这个 o.spd 将不会引用 particle.spd,如果 o.spd 为 nil。