使用函数编写一个合适的Lua 5.1模块

我正在使用一个内嵌了标准Lua 5.1的程序,试图编写一个可以调用函数的模块,但是一直不能成功。

当前环境非常挑剔,如果我犯错了,脚本就会崩溃,但是不会弹出任何错误,因此我在这里问问:

我有这样的代码(在moduletests.lua中):

local _ = {}

function _.prints()
    HUD.AddUpdateBoxText("Hello World!", 200) --相当于print()
end

然后我尝试使用require调用它:

mts = require 'moduletests' --似乎没有问题
mts.prints() --脚本会崩溃

通常来说,如果require函数有问题,脚本就会崩溃。脚本可以使用require函数,所以我认为它是正确的,但是调用打印函数时它会崩溃。

另一方面,我安装了另一个Lua模块,并成功调用了其中一个函数,我就是以它为模型搭建的 [这是该模块的代码(https://dl.dropboxusercontent.com/u/3623911/moses.lua)。

这是我如何使用它的代码:

moses = require 'moses' --成功

local bok = moses.isInteger(6)
HUD.AddUpdateBoxText(tostring(bok), 700); --成功,输出“true”

这很好,目的达到了。请问有人知道我的模块有什么不同或错误之处,或者有任何建议,可以让我打造一个更好的工作版本吗?

非常感谢您的帮助!

点赞
用户3924687
用户3924687

在 Lua 模块中,你必须 return 一些东西。你的代码之所以不起作用,是因为你正在尝试从模块返回的任何东西中调用一个方法,但是由于没有返回任何内容,因此只能期望出现错误。 试着返回一个表格:

local ar = {}
function ar.prints()
    HUD.AddUpdateBoxText("Hello World!", 200) --等同于 print()
end
return ar
2015-10-24 22:10:58