我刚开始编程并选择lua编写处理XML配置文件的脚本。Lua在递归函数中声明局部变量
我使用LuaXML(C绑定版本)加载XML文件,该文件将其映射到大量嵌套的表格。
当我试图编写一个函数来查找xmltable中的标记的所有匹配项时,我的问题就出现了。匹配被插入到函数返回的表中。我的问题是这个表变量的声明,它必须是局部函数。
首先我想:
local result = result or {}
但这个声明与每一个递归的变量。
最后,我想出了这个解决方案,它的工作原理,但似乎过于复杂,对我说:
function findall_wrapper(xmltable, tag)
local results = {}
function findall(xmltable, tag)
if xml.TAG == tag then table.insert (results, xmltable) end
for k, v in pairs(xmltable) do
if (type(v) == "table") then findall(v, tag) end
end
end
findall(xmltable, tag)
return results
end
我怎么能在一个更好的,更优雅的方式解决这个问题? 为什么local result = result or {}
在每次递归时都声明变量?
对不起,如果我的问题的答案太明显,但正如我所提到的,我刚开始编程。
当然可以!这正是我所缺少的。我必须将变量传递给递归函数。谢谢! – workspace 2013-05-07 17:18:18
我测试了两种解决方案的性能。具有包装功能的原始包装速度更快。有趣。 – workspace 2013-05-07 18:28:04