Lua中一个必需文件的函数似乎没被调用。

我正在尝试在LUA中使用require关键字来包含一个带有函数的文件,因为我是LUA新手,所以首先我尝试了一个简单的打印函数:

globalfunctions.lua

local globalfunctions = {}

function printSomething()
    print("OOOK")
end

return globalfunctions

然后我尝试调用这个函数:

local m = require "globalfunctions"
m.printSomething()

但是出现了一个错误,显示**"attempt to call field printSomething (nil value)"**。我做错了什么?

点赞
用户2795691
用户2795691

你将全局函数变成了局部值,这意味着它只能在本地操作,尝试将局部改为全局。

2013-10-03 16:03:42
用户513763
用户513763

问题在于你声明了一个函数却没有将它添加到你的模块中。

为了把函数实际存储在require返回的模块中,你需要将它添加到你在模块末尾返回的表格中。

globalfunctions.printSomething = printSomething

注意,globalfunctions是一个具有误导性的命名选择,因为a)它本身是一个局部变量,b)它将包含的函数也不会是全局的,它们会被你的模块所包含。

其次:理想情况下,为了使你的模块表现得跟大多数人所期望的一样,你应该让函数本地化,以避免污染全局命名空间(可能会覆盖现有变量)。

2013-10-03 16:04:13