Lua 递归问题意外结果

Lua Recursion issue unexpected result

我想弄清楚为什么这个函数忽略了最中间的 table?我忽略了一些我认为很简单的事情。

这是代码

tbl = {
    name = "first table";
    tbl = {
        name = "middle table";
        tbl = {
            name = "last table";
        };
    };
}

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)

输出>

first table
last table
nil

在您的示例中,您有一个递归结构,每个 table 有 1 个 name 并且可能有一个名为 tbl 的子 table。所以,我不清楚为什么要在这些条件下使用 for 循环。

tbl = {
  name = "first table",
  tbl = {
    name = "middle table",
    tbl = {
      name = "last table"
    }
  }
}

function PrintTable (Table)

  print("# Name", Table.name)
  
  local SubTable = Table.tbl

  if SubTable then
    return PrintTable(SubTable)
  end
  
end

PrintTable(tbl)

会 return:

# Name  first table
# Name  middle table
# Name  last table