капец какой-то.
Есть у меня программа для КМ вычислений Quanty, по сути – интерпретатор LUA с большой узкоспецифической библиотекой. Есть код в нескольких файлах, который я вызываю в мастер-файле через dofile(). Первые три файла объявляют глобальные переменные, последний – главный кусок кода, который с этими глобальными переменными делает манипуляции, вычисления и сохраняет в соответствующие файлы.
Выполнение последнего из этих файлов я пытаюсь взять в цикл. Но, судя по данным, что-то не так внутри этого кода, как будто некоторые переменные не обнуляются, а при каждом выполнении дополняются. Уже и прописал везде, где можно, local, но всё равно что-то где-то не так
Вопроса два:
1) в статье про dofile написано: you may want to run the new chunk in a protected environment, to avoid unpleasant side effects when running the code . Каким образом это реализовать?
2) есть ли какая IDE для LUA, чтобы можно было увидеть, какая переменная локальная, какая глобальная, и что где происходит?
1) https://stackoverflow.com/a/16366750/8876743 2) вроде как LSP умеет
сложно, но спасибо
Идея в том, чтобы дать коду из файла свободно читать из _G, но перехватывать запись в _G, что достигается через setmetatable(sandboxed_G, {__index = _G})
> чтобы можно было увидеть, какая переменная локальная, какая глобальная Можно логгировать через setmetatable(sandboxed_G, { __index = _G, __newindex = function(self, k, v) print("Setting "..k.." to "..inspect(v)) rawset(self, k, v) end })
Lua*
Виноват, новичок
А ты уверен, что это то что ему нужно?
> chunk in a protected environment, to avoid unpleasant side effects when running the code Вот конкретно эта фраза про то, что стоит запускать дуфайл в сэндбоксе, чтобы клиентский код не мог никак повлиять на скрытый для него рантайм
каким образом это организовать так, чтобы глобальные были ридонли для внутреннего?
Не использовать глобальные переменные, например
пример с ответа на SO
я пытаюсь как могу, вот серьёзно, все переменные в последнем файле объявил локальными (или не все? проверить не вручную пока не знаю как) но есть глобальные переменные, которые я объявляю в другом файле, и которые обязаны влиять на происходящее в последнем файле, и от них избавиться пока не знаю как
Пихай в цикл не только dofile на последний файл с кодом, а все файлы.
Обсуждают сегодня