вызывая файлы nodemcu lua 8266 - PullRequest
       54

вызывая файлы nodemcu lua 8266

0 голосов
/ 21 декабря 2018

Я пытаюсь понять использование dofile () в lua.Рекомендуется ли помещать в файл init.lua ряд других файлов с объявлениями функций, инициализацией Wi-Fi и т. Д.?init.lua:

dofile("InitWifi.lua") 
dofile(helperfunctions.lua") 
dofile(...) dofile(..)

tmr.alarm(0,3000, function()

runprogram()

end)

Это значительно сократило бы время загрузки тестируемой программы.

Является ли эффект dofile (xyx.lua) таким же, как если бы xyzКод .lua содержался в файле «myprogram.lua»?

Ответы [ 2 ]

0 голосов
/ 28 декабря 2018

Общая практика init.lua - запускать основной файл Lua после небольшого времени тестирования.

countdown = 5
tmr.alarm(0,2000,1,function()
if APPLICATION_REPROGRAM == nil then
    print("coutdown : "..countdown)
    countdown = countdown-1
    if countdown<1 then
        tmr.stop(0)
        countdown = nil
        local s,err
        if file.open("main.lua") then
            file.close()
            s,err = pcall(function() dofile("main.lua") end)                   
        end
        if not s then print(err) end
    end
end
end)

Если вам нужно, чтобы в глобальной среде было больше переменных и функций, прежде чем main.lua запуститсяВы можете просто добавить их, используя require внутри main.lua

local initWifi = require 'InitWifi.lua'

, он будет делать то же самое, что и dofile (), но с большим количеством контроля и обработкой ошибок.

Вы также можете использовать функции в initWifi.lua внутри main.lua:

initWifi.helperFunct(param1)
0 голосов
/ 21 декабря 2018

Еще один способ справиться с этой темой - использовать функцию require.

require работает аналогично dofile в том смысле, что выполняет файл Lua, но в нем также есть встроенный интеллект.

Lua require

Загружает данный модуль.Функция начинается с просмотра таблицы package.loaded, чтобы определить, загружен ли уже modname.Если это так, то require возвращает значение, хранящееся в package.loaded [modname].В противном случае он пытается найти загрузчик для модуля.

require - обычная практика загрузки модулей, модуль похож на библиотеку.Преимущество настройки файлов в качестве модулей состоит в том, что вы можете избежать перезаписи функции из другого файла, определяя область видимости в модуле.

Пример кода модуля foo.lua:

local foo {}

function foo.bar(a)
    local a = x + 7
    print(a)
end
-- More functions defined inside the foo table
-- ...

return foo

Пример использования require с модулем:

local f = require("foo")

f.bar(7)
...