169 похожих чатов

Добрый вечер. Извиняюсь, что начинаю с проблемы, но очень уж

капец какой-то.

Есть у меня программа для КМ вычислений 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, чтобы можно было увидеть, какая переменная локальная, какая глобальная, и что где происходит?

13 ответов

20 просмотров

1) https://stackoverflow.com/a/16366750/8876743 2) вроде как LSP умеет

Tony-Lutsenko Автор вопроса
Tony Lutsenko
сложно, но спасибо

Идея в том, чтобы дать коду из файла свободно читать из _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*

Tony-Lutsenko Автор вопроса
Tallneck Hephaestus
Lua*

Виноват, новичок

Wsevolod
1) https://stackoverflow.com/a/16366750/8876743 2)...

А ты уверен, что это то что ему нужно?

> chunk in a protected environment, to avoid unpleasant side effects when running the code Вот конкретно эта фраза про то, что стоит запускать дуфайл в сэндбоксе, чтобы клиентский код не мог никак повлиять на скрытый для него рантайм

Tony-Lutsenko Автор вопроса
Tallneck Hephaestus
> chunk in a protected environment, to avoid unple...

каким образом это организовать так, чтобы глобальные были ридонли для внутреннего?

Tony Lutsenko
каким образом это организовать так, чтобы глобальн...

Не использовать глобальные переменные, например

Tony-Lutsenko Автор вопроса
Tallneck Hephaestus
Не использовать глобальные переменные, например

я пытаюсь как могу, вот серьёзно, все переменные в последнем файле объявил локальными (или не все? проверить не вручную пока не знаю как) но есть глобальные переменные, которые я объявляю в другом файле, и которые обязаны влиять на происходящее в последнем файле, и от них избавиться пока не знаю как

Пихай в цикл не только dofile на последний файл с кодом, а все файлы.

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта