• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Вопрос NodeMCU, Lua - доступ к функциям в загружаемом файле

AlVal

New member
Пытаюсь разобраться как правильно работать с подгружаемыми функциями в Lua (для экономного использования памяти). Пока не ясно.
Есть два файла для теста: "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)           -- Вызов третьей функции
"f_test.lua" содержит функции печати, отличающиеся только способом получения параметра.
Код:
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
Если загружать файл с помощью loadfile("f_test.lua"), то выдаётся ошибка при вызове первой же функции.
Код:
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, а не loadfile... Это неправильная команда?

Если же второй файл подгружать в память командой dofile("f_test.lua"), то доступ к функциям есть, и всё печатается.
Код:
dofile('f_test.lua')
5    15   -- Контрольная печать
5         -- Первая функция
15        -- Вторая функция
40        -- Третья функция
>
Но т.к. это команда загрузки и запуска, то есть сомнение в корректности такого способа подгрузки функций.

Собственно вопросы:
1. Как же правильно подгружать файлы с дополнительными функциями?
2. Как эти файлы потом удалять из памяти?
 
Сверху Снизу