Пишу свою библиотеку API для робота(фермер/копатель/проч).
Поскольку апи перемещений по координатам/обход плоскости и проч подходят как для фермера, так и для майнера(и еще чего нибудь), было решено унифицировать эти функции путем передачи в качестве аргумента собственно функции действия(копание, собирательство). Выглядит примерно следующим образом:
function dig(arg)
...
robot.swing()
...
end
function move(action, arg)
...
robot.forward()
action(arg)
...
end
move(dig, 3)
Если выглядит именно так - то работает без проблем, функция спокойно передается одна в другую в качестве аргумента и вызывается оттуда.
Те кто писал библиотеки для ОС, именно библиотеки, знают, что реализуются они так:
local api={}
...
function api.dig()
...
end
function api.move()
...
end
return api
При такой форме записи столкнулся с проблемой, в интерпретаторе(где проверяю апи) подключаю свою либу:
a=require("api")
Далее вызываю a.move(dig, 3)
Интерпретатор ругается на то, что аргумент - нил в точке его использования в функции move(). Вероятно интерпретатор не понимает аргумента, причем вызвать просто a.dig(3) работает штатно.
Я новичок в луа и уж тем более в написании библ, подскажите что делаю неверно? как правильно передать аргументом функцию, чтоб она работала?
День добрый/утро/вечер/ночь.
Пишу свою библиотеку API для робота(фермер/копатель/проч).
Поскольку апи перемещений по координатам/обход плоскости и проч подходят как для фермера, так и для майнера(и еще чего нибудь), было решено унифицировать эти функции путем передачи в качестве аргумента собственно функции действия(копание, собирательство). Выглядит примерно следующим образом:
function dig(arg)
...
robot.swing()
...
end
function move(action, arg)
...
robot.forward()
action(arg)
...
end
move(dig, 3)
Если выглядит именно так - то работает без проблем, функция спокойно передается одна в другую в качестве аргумента и вызывается оттуда.
Те кто писал библиотеки для ОС, именно библиотеки, знают, что реализуются они так:
local api={}
...
function api.dig()
...
end
function api.move()
...
end
return api
При такой форме записи столкнулся с проблемой, в интерпретаторе(где проверяю апи) подключаю свою либу:
a=require("api")
Далее вызываю a.move(dig, 3)
Интерпретатор ругается на то, что аргумент - нил в точке его использования в функции move(). Вероятно интерпретатор не понимает аргумента, причем вызвать просто a.dig(3) работает штатно.
Я новичок в луа и уж тем более в написании библ, подскажите что делаю неверно? как правильно передать аргументом функцию, чтоб она работала?
Поделиться сообщением
Ссылка на сообщение
Поделиться на других сайтах