我是ESP8266和lua的新手,是否可以在ESP8266上使用多个文件?
我有2个文件,第一个名为foo.lua
它包含以下代码:
function double(n)
return n * 2
end
,另一个文件new.lua
只需调用第一个文件,如下所示:
require 'foo'
print(foo.double(5))
我可以将此技术用于esp8266吗?
我尝试了但是当我按保存到esp按钮时我得到了
和
和另一个弹出消息
并将其打印在控制台上:
> file.remove("foo.lua");
> file.open("foo.lua","w+");
> w = file.writeline
> w([[function double(n)]]);
stdin:1: open a file first
> w([[ return n * 2]]);
stdin:1: open a file firstw([[end]]);
stdin:1: open a file firstw([[]]);
stdin:1: open a file firstw([[print (double(2))]]);
stdin:1: open a file firstfile.close();dofile("foo.lua");
cannot open foo.lua
即使我尝试使用发送到ESP按钮运行该文件,它也能正常工作,但不会保存。
答案 0 :(得分:1)
有一种方法可以实现这一目标。但你不能像foo.double(5)
那样打电话。
我建议你尝试将你的功能放在一个类中。然后你只需要使用命令编译它:
node.compile("foo.lua")
如果您使用资源管理器,请将其写在程序的右下角,您可以在其中找到发送按钮。
要创建一个类,你应该使用一个模板,我建议你使用这个:
function Class(members)
local mt = {
__metatable = members;
__index = members;
}
local function new(_, init)
return setmetatable(init or {}, mt)
end
local function copy(obj, ...)
local newobj = obj:new(unpack(arg))
for n,v in pairs(obj) do newobj[n] = v end
return newobj
end
members.new = members.new or new
members.copy = members.copy or copy
return mt
end
在你的foo.lua中只包括这个:
require'Class'
如果你想使用类变量,请在此处写入
local foo_mt = Class(foo)
之后,您可以添加所需的所有defs。
别忘了用return foo;