Вызов функций / переменных / таблиц из отдельного файла в Lua

В настоящее время я работаю над довольно подробным проектом в Lua, в частности, используя LOVE2D. Я сейчас пользуюсь require'file' для того, чтобы получить доступ к различным частям моего проекта, но это кажется очень плохой формой. Я столкнулся с проблемой перезаписи таблиц из разных файлов с одинаковыми именами. Должен быть профессиональный, более чистый способ сделать это, но я не смог найти его. Кто-нибудь может мне помочь?

1 ответ

С помощью require это правильный способ сделать это.

Думайте о модуле как о функции, которая выполняется при загрузке. Возвращаемое значение кэшируется и возвращается при последующих вызовах require. Так же, как вы бы использовали local переменные для ограничения области действия в функции, вы можете сделать то же самое в модуле.

Я предполагаю, что ваши модули реализованы в виде глобальных таблиц:

mymodule = {}

function mymodule.foo()
  return 'bar'
end    

И вы загружаете модуль как:

require 'mymodule'

Просто измените таблицу модулей на local Переменная и вернуть его:

local mymodule = {}

function mymodule.foo()
  return 'bar'
end

return mymodule

Затем вы можете загрузить модуль с любым именем, которое вы выберете:

local mymodule = require 'mymodule'

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

Приведенный выше пример взят из учебного модуля по веб-сайту lua-users.org. Проверьте это для получения дополнительной информации о создании модулей. Также стоит прочитать, как писать модули Lua в мире post-module().

Другие вопросы по тегам