Я только что начал программировать и отбирал lua, чтобы написать скрипт, обрабатывающий файл конфигурации XML.Lua объявляет локальную переменную в рекурсивной функции
Загрузите XML-файл с помощью LuaXML (C-привязывающей версии), который сопоставляет его с сильно вложенной таблицей.
Моя проблема возникла, когда я попытался написать функцию, которая находит все совпадения с тегом в 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
Я тестировал производительность двух решений. Оригинальный с функциями обертки выполняется быстрее. Интересно. – workspace