Lua - Как использовать функции из другого script

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

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

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

Ответы

Ответ 1

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

function double(n)
  return n * 2
end

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

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

function slimefunc(...) stuff() end

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

utils = {}

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

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

Ответ 2

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

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

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

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