Перейти к содержимому
  • 0
artem211

Актуальный вопрос, функция в качестве аргумента.

Вопрос

День добрый/утро/вечер/ночь. 

Пишу свою библиотеку 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) работает штатно.

Я новичок в луа и уж тем более в написании библ, подскажите что делаю неверно? как правильно передать аргументом функцию, чтоб она работала?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Рекомендуемые сообщения

a.move(a.dig, 3)

Что самое странное, когда пробовал - не работало, перезапустил майн сингл - заработало.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Что самое странное, когда пробовал - не работало, перезапустил майн сингл - заработало.

Вот, то же самое, я тебе и про своего робота говорил. Проверил в сингле - всё как надо делает. Без всяких пропусков ходов.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вы вставили отформатированное содержимое.   Удалить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.


×
×
  • Создать...