Lua从功能问题返回

cyh*_*iso 2 lua return function

我正在尝试用lua解析一些xml文件,我仍然坚持这个功能:

function get_node_by_id (xml, nodeId)
    for i=1, #xml, 1 do
        if get_attr_by_name(xml[i], 'Id') == nodeId then
            print ("TRUEEEEE", i, xml[i])
            return xml[i]
        else
            get_node_by_id(xml[i], nodeId)
        end
    end
end
Run Code Online (Sandbox Code Playgroud)

问题是print("TRUEEEEE", i, xml[i])有效,但它会nil在下一行返回return xml[i].我究竟做错了什么?

Mic*_*man 7

您以递归方式调用该函数,但仅提供单个返回.如果您碰巧在第二级找到要查找的节点,则只将该值返回到第一级,这对它没有任何作用.

也许你想要这样的东西(未经测试的代码):

function get_node_by_id (xml, nodeId)
    for i=1, #xml, 1 do
        if get_attr_by_name(xml[i], 'Id') == nodeId then
            print ("TRUEEEEE", i, xml[i])
            return xml[i]
        else
            local node = get_node_by_id(xml[i], nodeId)
            if node then return node end
        end
    end
end
Run Code Online (Sandbox Code Playgroud)