【问题标题】:multi files with esp8266带有 esp8266 的多文件
【发布时间】:2016-02-10 15:38:12
【问题描述】:

我是 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 按钮运行文件,它也可以工作,但不会被保存。

【问题讨论】:

  • 包含w = file.writeline的代码在哪里?因为这看起来要么不正确,要么 file.open 以某种方式失败(并且没有被抓住)。
  • 我在任何代码文件中都没有 w = file.writeline。
  • 那一定来自某个地方。大概它是您用来执行此操作的工具的一部分。无论如何,问题要么是该分配,要么是(我认为更有可能)file.open 调用失败。我无法推测为什么它会失败。如果没有对它的返回状态做某事,那么您可能无法做太多事情来找出可能失败的地方。直接询问熟悉该工具的人可能会更有帮助。

标签: lua esp8266 esplorer


【解决方案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)

之后,您可以添加所需的所有定义。 不要忘记以return foo; 结尾

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-16
    • 2015-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多