0

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

4

1 回答 1

1

有一种方法可以实现这一目标。但是你不能只是打电话给 like 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;

于 2016-05-03T15:04:31.717 回答