在Lua中使用“ require()”发出的问题,需要帮助来理解为什么它不起作用

时间:2018-09-16 19:54:20

标签: module lua require love2d

我正在学习使用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()无法加载脚本。为什么会这样?为什么直接使用该功能呢?将要求绑定到的本地变量有什么意义?

1 个答案:

答案 0 :(得分:1)

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

因此,您的mapscript.lua文件应将其功能放在表中。像这样:

local mod = {}

function mod.map_generate() ... end

return mod