Пытаюсь разобраться как правильно работать с подгружаемыми функциями в Lua (для экономного использования памяти). Пока не ясно.
Есть два файла для теста: "main.lua" - основная программа, и "f_test.lua" - с подгружаемыми функциями.
"main.lua" содержит простые переменные, и пытается напечатать их значение с помощью функций хранящихся во втором файле.
"f_test.lua" содержит функции печати, отличающиеся только способом получения параметра.
Если загружать файл с помощью loadfile("f_test.lua"), то выдаётся ошибка при вызове первой же функции.
При этом непонятно, загрузился ли файл, и если да, то почему функции не доступны? Ещё смущает, что применяется почему-то dofile, а не loadfile... Это неправильная команда?
Если же второй файл подгружать в память командой dofile("f_test.lua"), то доступ к функциям есть, и всё печатается.
Но т.к. это команда загрузки и запуска, то есть сомнение в корректности такого способа подгрузки функций.
Собственно вопросы:
1. Как же правильно подгружать файлы с дополнительными функциями?
2. Как эти файлы потом удалять из памяти?
Есть два файла для теста: "main.lua" - основная программа, и "f_test.lua" - с подгружаемыми функциями.
"main.lua" содержит простые переменные, и пытается напечатать их значение с помощью функций хранящихся во втором файле.
Код:
e=5 --
f=15 -- Объявлены две переменные
loadfile("f_test.lua") -- Загружен в ОЗУ файл с функциями
print(e,f) -- Контрольная печать переменных (убедиться, что они понятны интерпретатору)
testfunc_1() -- Вызов первой функции
testfunc_2(f) -- Вызов второй функции
testfunc_3(4) -- Вызов третьей функции
Код:
function testfunc_1()
print(e) -- Печать глобальной переменной (e)
end
function testfunc_2(g)
print(g) -- Печать аргумента функции (g)
end
function testfunc_3(i)
arr = {10,20,30,40,50,60,70,80}
print(arr[i]) -- Печать из массива, по принятому извне индексу (i)
end
Код:
dofile('f_test.lua')
5 15 -- Контрольная печать переменных, до этого момента всё нормально
main.lua:5: attempt to call global 'testfunc_1' (a nil value)
stack traceback:
main.lua:5: in main chunk
[C]: in function 'dofile'
stdin:1: in main chunk
>
Если же второй файл подгружать в память командой dofile("f_test.lua"), то доступ к функциям есть, и всё печатается.
Код:
dofile('f_test.lua')
5 15 -- Контрольная печать
5 -- Первая функция
15 -- Вторая функция
40 -- Третья функция
>
Собственно вопросы:
1. Как же правильно подгружать файлы с дополнительными функциями?
2. Как эти файлы потом удалять из памяти?