2015-11-09 2 views
0

Я новичок в ESP8266 и lua, возможно ли работать с несколькими файлами на ESP8266? У меня есть 2 файла первый под названием foo.lua и содержит этот код:несколько файлов с esp8266

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, он работает, но он не будет сохранен.

+0

Где код, который содержит 'w = file.writeline'? Потому что это окажется либо неверным, либо 'file.open' каким-то образом сработало (и не было поймано). –

+0

У меня нет w = file.writeline в любом файле кода. – mohammad

+0

Это должно происходить откуда-то. Предположительно, это часть инструмента, который вы используете для этого. В любом случае проблема заключается либо в задании, либо, скорее, я думаю, что вызов 'file.open' терпит неудачу. Я не могу рассуждать о том, почему это было бы неудачно. И без чего-либо, делающего что-то с его возвратным статусом, мало что можно сделать, чтобы выяснить, что может быть неудачным. Просить кого-то, знакомого с инструментом напрямую, может быть полезно. –

ответ

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;

Смежные вопросы