Мульти файлы с esp8266
Я новичок в ESP8266 и Луа, можно ли работать с несколькими файлами на 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", он работает, но он не будет сохранен.
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;