在 Lua 中使用 "require()" 时出现问题,需要帮助了解为什么它不起作用

Issue using "require()" in Lua, need help understanding why it won't work

我正在学习使用 Lua,更具体地说 - love2d 库,并决定尝试利用 lua 的 'require()' 功能来组织我的项目。我知道 package.path 及其使用方式,但即使看似正确地完成了所有操作,也使用了外部脚本 returns '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()函数不应该返回任何东西,它只是一堆循环来创建一个值的方阵,它有两个参数。我认为它不那么重要,所以为了使 post 更整洁,我链接了一个 pastebin: 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: attempt to index global 'mapModule' (a boolean value)

然而 当直接使用 map_generate() 时,问题消失了。

如果我没理解错的话,错误的意思是require()加载脚本失败。为什么会这样?为什么直接使用该功能会起作用?您将 require 绑定到的局部变量有什么意义?

Lua 模块不应在全局 table 中声明函数。他们应该工作的方式是将函数放在 table 中,然后 return。这允许获取模块的代码决定如何访问该模块的功能。

因此您的 mapscript.lua 文件应将其函数放在 table 中。像这样:

local mod = {}

function mod.map_generate() ... end

return mod