Lua 函数返回问题

我正在尝试使用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

问题是,print(“TRUEEEEE”,i,xml[i])可以正常工作,但在下一行return xml[i]中返回nil。我做错了什么?

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

点赞
stackoverflow用户107090
stackoverflow用户107090

我认为你在 else 块缺少一个 return:

return get_node_by_id(xml[i], nodeId)
2011-07-14 14:49:28
stackoverflow用户221509
stackoverflow用户221509

您正在递归调用函数,但只提供了一个返回值。如果您在第二个级别中找到要查找的节点,则只将该值返回给第一个级别,这并不会对其进行任何操作。

也许您想要类似于这样的东西(未经过测试的代码):

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
2011-07-14 14:51:19