我正在学习使用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()
函数不应返回任何东西,它只是创建值平方矩阵的一堆循环,它需要两个参数。我不认为这很重要,因此为了保持这篇文章整洁,我将链接一个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:尝试索引全局'mapModule'(一个布尔值)
如何直接使用map_generate()
时,问题消失了。
如果我正确理解,则错误表明该require()无法加载脚本。为什么会这样?为什么直接使用该功能呢?将要求绑定到的本地变量有什么意义?
答案 0 :(得分:1)
Lua模块不应在全局表中声明函数。他们应该工作的方式是将函数放在表中,然后返回。这使获取模块的代码可以决定如何访问该模块的功能。
因此,您的mapscript.lua
文件应将其功能放在表中。像这样:
local mod = {}
function mod.map_generate() ... end
return mod