Lua 中使用 require() 函数出现问题,需要帮助理解为什么它无法工作

我正在学习 Lua,更具体地说是 love2d 库,并决定尝试通过利用 lua 的 require() 函数来组织我的项目。我了解 package.path 和它的使用方式,但即使看起来做了一切正确的事情,使用外部脚本中的函数也会返回 true。以下是详细信息:

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

-- 模块需要和插入
-- Map 模块
mapModule = require('mapscript')

在程序中继续,进入 love.load():

 mapModule.map_generate(tilemap_1, MAP_PROPERTIES)

这里涉及的 map_generate() 函数不应该返回任何内容,它只是创建一个值方阵的一堆循环,需要两个参数。我不认为这是很重要的,所以为了保持这篇文章更整洁,我链接了一个 pastebin: https://pastebin.com/ZaE7Tzpa

文件树如下:

`-main.lua
 -conf.lua
 -run.bat (为了快速运行 main.lua)
 -scripts
   -- mapscript.lua
 -assets

`

运行文件时,我收到以下错误:

main.lua: 51: attempt to index global 'mapModule' (一个布尔值)

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

如果我理解正确,这个错误意味着 require() 函数未能成功加载脚本。为什么会发生这种情况?为什么直接使用函数能够工作?将 require 绑定到本地变量的点是什么?

点赞
用户734069
用户734069

Lua 模块不应该在全局表中声明函数。它们应该通过将函数放在表中来工作,然后返回该表。这允许获取模块的代码决定如何访问该模块的函数。

因此,你的 mapscript.lua 文件应该将其函数放在一个表中。类似这样:

local mod = {}

function mod.map_generate() ... end

return mod
2018-09-17 13:35:24