Мульти файлы с 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;

Другие вопросы по тегам