gpt4 book ai didi

recursion - Lua在递归函数中声明局部变量

转载 作者:行者123 更新时间:2023-12-02 23:37:16 25 4
gpt4 key购买 nike

我刚刚开始编程,并选择lua来编写一个处理XML配置文件的脚本。

我使用 LuaXML(C 绑定(bind)版本)加载 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 或 {} 在每次递归时都声明变量?

很抱歉,如果我的问题的答案太明显,但正如我提到的,我刚刚开始编程。

最佳答案

如果您的意思是您不想使用包装函数,那么我认为您已经非常接近了。这就是您的目标吗?

function findall(xmltable, tag, results)
local results = results or {}
if xmltable[xml.TAG] == tag then table.insert(results, xmltable) end
for k, v in pairs(xmltable) do
if type(v) == "table" then findall(v, tag, results) end
end
return results
end

关于recursion - Lua在递归函数中声明局部变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16418914/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com