【问题标题】:Lua Get/Set MetatableLua 获取/设置元表
【发布时间】:2022-01-11 04:58:52
【问题描述】:
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() 打印返回零。但是,如果我要执行 ents.GetLocalPlayer():GetIndex(),它会返回 1。

想法是如果我不做GetIndex()之类的事情,则默认返回值为localplayer

【问题讨论】:

    标签: lua metatable


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2021-06-13
      • 1970-01-01
      • 2017-02-01
      • 2014-01-23
      • 1970-01-01
      • 2013-10-03
      • 2015-11-18
      • 2015-05-21
      • 2018-11-23
      相关资源
      最近更新 更多