在我当前的项目中,我试图通过在main.lua
的最顶层执行dofile()来全局地为我的项目添加一些语法。然后我要求第三个文件使用我试图在我的项目中添加为全局的文件;但是这样做会收到错误attempting to index the global value
。
例如,在下面的示例中,我使用dofile()试图使test1:hello()在我的项目中全局可用,但在需要test2.lua的过程中,我收到错误:
PANIC: unprotected error in call to Lua API (test2.lua: attempt to index global 'test1' (a nil value))
在这种情况下,test1不应该作为全局存在吗?我怎么能绕过这个?
main.lua:
dofile('test1.lua')
require('test2')
test1.lua
test1 = {}
function test1:hello()
print("hello")
end
test2.lua
module('test2')
test1:hello()
答案 0 :(得分:5)
在main.lua中:
require("test2.lua")
应该是:
require("test2")
并且在test2.lua中我必须将package.seeall作为第二个参数传递给module(),以便它可以在test1中看到值
module('test2', package.seeall)
test1:hello()
答案 1 :(得分:0)
我刚刚测试了代码(在简单的Lua 5.1中)并且它在我的身边(我必须用require('test2.lua')
替换require('test2')
)。
也许这是您环境中的问题。你在哪里执行这个Lua代码。它是否允许全局声明?
如果是,那么听起来好像你没有按照你在问题中所做的那样做。
检查以下内容:
dofile('test1.lua')
真正在require('test2.lua')
tset1
而不是test1
)