Включая файлы, перезаписывая переменные - PullRequest
3 голосов
/ 15 февраля 2012

Я пытаюсь перезаписать переменные в моем первом файле .lua, требуя второго включения в конце моего кода.

file1.lua

val = 1
require "file2"

file2.lua

val = 2

К сожалению, это, похоже, не работает, так как val все еще равен 1 после этого. Решение, которое я предложил, чтобы потенциальные будущие пользователи этих файлов могли включать файлы, - это новая функция, которую я сейчас добавляю при инициализации Lua:

function include(file)
    dofile("path/since_dofile_doesnt_seem_to_use/package/path" .. file .. ".lua")
end

Это работает точно так, как ожидалось, но, поскольку я все еще новичок в Lua, я хотел бы знать, может ли быть лучшее решение. Может быть, что-то уже встроено?

Обновление:

Моя проблема заключалась в том, что мне случайно потребовался файл file2 несколько раз для нескольких файлов, и Lua не загружал его снова, чтобы изменить значение. Решаемые.

Ответы [ 2 ]

6 голосов
/ 15 февраля 2012

Lua отслеживает все файлы, которые у вас есть require d в вашем коде, в таблице с именем package.loaded. Каждый раз, когда файл require d, эта таблица проверяется, и если имя модуля уже существует в таблице, оно не загружается. Если он не существует в таблице, модуль загружается и имя добавляется в таблицу. Таким образом, вы можете require модуль много раз, но он будет запущен только в первый раз.

Вы можете обойти это, установив package.loaded[packagename] = nil после require пакета. Таким образом, когда lua проверяет, существует ли имя пакета в таблице, оно не найдет его, поэтому вы можете запрашивать его столько раз, сколько захотите.

0 голосов
/ 15 февраля 2012

в file2.lua

print(val)
_G.val = 2
print(val)

вывод должен быть

1

2

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...