Луа вернуться из функции проблемы - PullRequest
2 голосов
/ 14 июля 2011

Я пытаюсь разобрать некоторые XML-файлы с помощью lua и Я застрял на этой функции:

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]) работает, но возвращает nil в следующей строке return xml[i]. Что я делаю неправильно?

Ответы [ 2 ]

7 голосов
/ 14 июля 2011

Вы вызываете функцию рекурсивно, но предоставляете только один возврат.Если вам случится найти узел, который вы ищете, на втором уровне, вы вернете значение только на первый уровень, который ничего с этим не сделает.

Может быть, вы хотите что-то вроде этого (непроверенный код):

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
2 голосов
/ 14 июля 2011

Я думаю, что вы пропускаете возврат в блоке else:

return get_node_by_id(xml[i], nodeId)
...