Lua获取/设置元表

local ents = {
  GetLocalPlayer = function()

    local tbl = {
      localplayer = {"Ava", "1", {213,234,234}},

      GetIndex = function(self)
        return self.localplayer[2]
      end,
    }
    setmetatable(tbl, getmetatable(tbl.localplayer))
    return tbl
  end
}

local function main()
  print(ents.GetLocalPlayer()[2])
end

main()打印的结果为 nil。但是如果我使用 ents.GetLocalPlayer():GetIndex(),它会返回 1。

我的想法是,如果没有执行诸如 GetIndex() 这样的操作,则默认返回值为 localplayer。

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

点赞
stackoverflow用户3574628
stackoverflow用户3574628

一个表默认没有元表,这就是为什么你的 getmetatable 调用返回 nil 的原因。为了做任何事情,setmetatable 的第二个参数必须是一个至少有一个元方法的表(__index 是最常见的元方法)。

解决方法是将 getmetatable(tbl.localplayer) 改为 {__index = tbl.localplayer}

2021-12-06 00:37:25