调用文件nodemcu lua 8266

时间:2018-12-21 02:51:32

标签: lua esp8266 nodemcu

我试图了解lua中dofile()的用法。 放入init.lua是一个好习惯 用功能声明,wifi初始化等等归档其他文件行? 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 :(得分:1)

处理此主题的另一种方法是使用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)

答案 1 :(得分:0)

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之前需要在全局环境中添加更多变量和函数,只需在main.lua内使用 require 将它们添加即可。

local initWifi = require 'InitWifi.lua'

它将与dofile()相同,但具有更多的控制和错误处理。

您还可以使用main.lua内initWifi.lua中的功能:

initWifi.helperFunct(param1)