Перейти к содержимому
  • 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) работает штатно.

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

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


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

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

  • 0

a.move(a.dig, 3)

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

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


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

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

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

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


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

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

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

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

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

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

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

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

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


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