Lua Get/Set 元表

Lua Get/Set Metatable

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() 打印 returns 零。但是,如果我要执行 ents.GetLocalPlayer():GetIndex(),它会 returns 1.

如果我不做 GetIndex()

之类的事情,我的想法是让默认的 return 值为 localplayer

A table 没有默认元table,这就是为什么您的 getmetatable 调用 returns nil。为了执行任何操作,setmetatable 的第二个参数必须是具有至少一个元方法的 table。 (__index 是最常见的元方法。)

解决办法是把getmetatable(tbl.localplayer)改成{__index = tbl.localplayer}