在表格内部附加元表

我有一个解析配置文件并生成表格的解析器。

生成的表格可能如下所示:

root = {
 global = {
 },
 section1 = {
   subsect1 = {
     setting = 1
     subsubsect2 = {
     }
   }
 }
}

目标是有一个表格我可以从中读取设置,如果设置不存在,它将尝试从其父项中获取。在顶层,它将从 global 中获取。如果 global 中不存在它将返回 nil。

我像这样在 root 上附加元表:

local function attach_mt(tbl, parent)
    for k,v in pairs(tbl) do
      print(k, v)
      if type(v) == 'table' then
        attach_mt(v, tbl)
        setmetatable(v, {
          __index = function(t,k)
            print("*****parent=", dump(parent))
            if parent then
              return tbl[k]
            else
              if rawget(tbl, k) then
                return rawget(tbl, k)
              end
            end
            print(string.format("DEBUG: Request for key: %s: not found", k))
            return nil
          end
        })
      end
    end
  end

  attach_mt(root)

然而,请求键时它不起作用。情况似乎总是为 nil。如何从父表中读取值?

点赞
用户1847592
用户1847592
本地函数attach_mt(tbl,parent)
设置元表tbl,{__index = parent或root.global}
对于k,v中的每对键值对,如果类型是“表”,则
使v也带有相同的元表tbl。
结束
end
将元表附加到root。
设置元表root.global为nil
2015-10-02 02:44:08