Проблема с использованием "require ()" в Lua, нужна помощь, чтобы понять, почему это не сработает - PullRequest
0 голосов
/ 16 сентября 2018

Я учусь использовать Lua, точнее - библиотеки love2d, и решил попробовать организовать свой проект, используя функцию lua 'require ()'. Я знаю о package.path и о том, как он используется, но даже после того, как казалось бы, все сделано правильно, использование функции из внешнего скрипта возвращает «true». Вот подробности:

-- Package.Path edit
package.path = package.path .. ';scripts/?.lua' 

-- Module requiring and inserting
-- Map module
mapModule = require('mapscript')

Продолжаем дальше в программе, внутри love.load ():

 mapModule.map_generate(tilemap_1, MAP_PROPERTIES)

Рассматриваемая функция map_generate() не должна ничего возвращать, это просто набор циклов для создания квадратной матрицы значений, которая принимает два аргумента. Я не думаю, что это так важно, поэтому, чтобы держать этот пост более аккуратным, я привожу ссылку: https://pastebin.com/ZaE7Tzpa

Дерево файлов выглядит следующим образом:

`-main.lua
 -conf.lua
 -run.bat (to quickly be able to run the main.lua)
 -scripts 
   -- mapscript.lua
 -assets

`

При запуске файла я получаю следующую ошибку:

main.lua: 51: попытка индексировать глобальный «mapModule» (логическое значение)

ОДНАКО при прямом использовании map_generate() проблема исчезает.

Если я правильно понимаю, ошибка означает, что require () не смогла загрузить скрипт. Почему это происходит? Почему использование функции напрямую работает вместо этого? Какой смысл локальной переменной, с которой вы связываете требование?

1 Ответ

0 голосов
/ 17 сентября 2018

Lua-модули не должны объявлять функции в глобальной таблице. Они должны работать, помещая функции в таблицу, которую они затем возвращают. Это позволяет коду, извлекающему модуль, решать, как будут доступны функции этого модуля.

Таким образом, ваш mapscript.lua файл должен поместить свои функции в таблицу. Примерно так:

local mod = {}

function mod.map_generate() ... end

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