2013-10-03 145 views
1

我试图使用LUA require关键字包括与功能的文件,因为我是新来的LUA首先我想简单的打印功能:功能似乎并没有被称为

globalfunctions.lua

local globalfunctions = {} 

function printSomething() 
    print("OOOK") 
end 

return globalfunctions 

然后我试图调用此函数写:

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

而是出错说“试图调用字段printSomething(零值)“ 我做错了什么?

回答

2

问题是你声明一个函数,但不要将它添加到你的模块。

要将函数实际存储在由require返回的模块中,您需要将其添加到模块末尾返回的表中。

globalfunctions.printSomething = printSomething 

注意globalfunctions是一个欺骗性的名字的选择,因为)它的自身B)将含有不会是全球无论是功能,当您的模块包含

其次一个局部变量:理想,为了让你的模块像大多数人所期望的那样工作,你可以使本地函数不污染全局名称空间(可能覆盖现有变量)。

+0

Cleaner:function globalfunctions.printSomething()... end – ToxicFrog

1

您使全局函数成为本地值,这意味着它只能在本地运行,尝试将局部变为全局。

+0

这不是问题。它与本地变量一样完美(虽然名称有点令人困惑),因为它在模块结束时返回。为了真正的原因,看看我的答案。 – jpjacobs