使用esp8266的多个文件

时间:2015-11-09 21:18:59

标签: lua esp8266 esplorer

我是ESP8266和lua的新手,是否可以在ESP8266上使用多个文件? 我有2个文件,第一个名为foo.lua 它包含以下代码:

function double(n)
  return n * 2
end

,另一个文件new.lua只需调用第一个文件,如下所示:

require 'foo'
print(foo.double(5))

我可以将此技术用于esp8266吗?

我尝试了但是当我按保存到esp按钮时我得到了

enter image description here

enter image description here

和另一个弹出消息

并将其打印在控制台上:

> 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按钮运行该文件,它也能正常工作,但不会保存。

1 个答案:

答案 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;

结束