Lua - Как использовать функции из другого скрипта - PullRequest
13 голосов
/ 19 марта 2010

Мне интересно, как использовать функции из другого скрипта в Lua. Например, скажем, GameObjectUtilities содержит функции, которые будут использовать многие сценарии GameObject. Скрипт Slime (a GameObject) хочет использовать функцию в GameObjectUtilities.

У меня проблемы с тем, чтобы заставить это работать. Я посмотрел здесь , но я все еще не до конца понимаю. Нужно ли создавать модуль или таблицу для хранения функций в GameObjectUtilities, чтобы функции в ней использовались в других сценариях? Если да, то как лучше всего это сделать?

Это очень странно. Это действительно работает, когда я просто делаю это нормальным способом. Проблема в том, что когда я запускаю свое приложение и оно пытается использовать скрипт, оно не работает. Я не понимаю.

Ответы [ 2 ]

12 голосов
/ 19 марта 2010

Нет, вам не нужно создавать модуль. Если вы просто создаете foo.lua, как это:

function double(n)
  return n * 2
end

И тогда в вашем скрипте require 'foo' вы сможете получить доступ к функции double, как это было определено в том же скрипте. Эти функции не могут попасть в ваши локальные системы, но они создаются в одной и той же среде - все, что module 'name' делает, это создает новую таблицу и сбрасывает текущую среду в эту таблицу.

Итак, вы можете просто сделать:

function slimefunc(...) stuff() end

В GameObjectUtils.lua, а если вы require 'GameObjectUtils', то Slime может просто использовать slimefunc. Или, если вы хотите, чтобы это было в пространстве имен:

utils = {}

function utils.slimefunc(...) stuff() end

И он будет доступен как utils.slimefunc. (Если вы сделаете это, вы должны быть очень осторожны, чтобы не допустить утечки ваших имен - рассудительно используйте местных жителей.)

0 голосов
/ 20 марта 2010

Вы не дали нам достаточно информации. Например, вы не говорите, определено ли GameObjectUtilities или каково его значение. (Я предполагаю, что он установлен на true.)

Я настоятельно рекомендую вам купить второе издание превосходной книги Роберто Иерусалимши Программирование на Lua , которое объясняет идиоматическое использование require и module очень просто и ясно , Это также отличная книга для тех, кто использует Lua, чтобы максимально использовать язык и библиотеки. К счастью, есть бесплатный образец главы , который на данный момент охватывает именно ту тему, которую вы ищете. Но купи книгу в любом случае; хорошо потрачено 25 долларов: -)

Если вы не хотите покупать книгу, вы можете прочитать бесплатный образец главы , и вы также можете прочитать о как делать вещи «по-старому», без module(...), потому что всего предыдущего издания бесплатно онлайн.

Одним из возможных коротких ответов является то, что ваш сценарий "утилит", вероятно, должен создать таблицу и вернуть ее .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...