Lua递归问题的未预期结果

我试图弄清楚为什么这个函数忽略了中间的最多表格?我假设忽略了一些简单的东西。

以下是代码

tbl = {
    name = "第一个表格";
    tbl = {
        name = "中间表格";
        tbl = {
            name = "最后的表格";
        };
    };
}

sayName = function(tbl)
    print(tbl.name)
    if tbl.tbl ~= nil then
        for _,v in pairs(tbl.tbl) do
            sayName(v)
        end;
    end;
end;

sayName(tbl)

输出>

第一个表格
最后的表格
nil

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

点赞
stackoverflow用户10953006
stackoverflow用户10953006

在你的例子中,你有一个递归结构,每个表都有 1 个 name 和可能一个名为 tbl 的子表。所以,我不清楚为什么会在这些条件下使用 for 循环。

tbl = {
  name = "第一张表",
  tbl = {
    name = "中间表格",
    tbl = {
      name = "最后一张表"
    }
  }
}

function PrintTable (Table)

  print("# 名称", Table.name)

  local SubTable = Table.tbl

  if SubTable then
    return PrintTable(SubTable)
  end

end

PrintTable(tbl)

将返回:

# 名称  第一张表
# 名称  中间表格
# 名称  最后一张表
2021-12-31 06:52:44