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 должны, вероятно, создать таблицу и вернуть.