себя простой синтаксис модулей, чтобы в одном (базовом) модуле были базовые определения функций, а в другом можно было их переназначать. Это мне удалось сделать, но сейчас базовые определения используют значения переменных из базового модуля, а не из дочернего. Т.е.:
base.lua:
name='_base'
function test()
print(name)
end
function test2()
end
mod1.lua:
name='mod1'
function test2()
test()
end
и при вызове test2 печатается строка '_base', а хотелось бы 'mod1'.
Файл mod1.lua подгружается с env, в котором есть все функции и переменные base.lua и этот env меняется в процессе загрузки mod1, но функция test() как будто выполняется в старом env.
Есть функция setfenv, которая переключает контекст. Ну, то есть по дефолту - глобальная таблица - _G, а так - какая-то другая таблица. https://www.lua.org/pil/14.3.html setfenv(1, setmatatable({}, {__index = _G})
Обсуждают сегодня