当前位置 : 主页 > 网络编程 > lua >

Chain Lua metatables

来源:互联网 收集:自由互联 发布时间:2021-06-23
我有一种情况,其中两个库L,M试图为_G设置metatable(分别命名为mL,mM).元数据中唯一的东西是__index. 如何链接这两个metatable,以便如果一个中的__index失败,则调用另一个中的索引? 有一个met
我有一种情况,其中两个库L,M试图为_G设置metatable(分别命名为mL,mM).元数据中唯一的东西是__index.

如何链接这两个metatable,以便如果一个中的__index失败,则调用另一个中的索引?

有一个metatable存储mL和mM,如果一个返回nil,检查另一个:

local metatbl = {}
metatbl.tbls = {mL, mM};
function metatbl.__index(intbl, key)
  for i, mtbl in ipairs(metatbl.tbls) do
    local mmethod = mtbl.__index
    if(type(mmethod) == "function") then
      local ret = mmethod(table, key)
      if ret then return ret end
    else
     if mmethod[key] then return mmethod[key] end
    end
  return nil
  end
end

setmetatable(_G,metatbl)
网友评论