使用dofile并需要结合使用

时间:2012-04-09 20:31:07

标签: lua

在我当前的项目中,我试图通过在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()

2 个答案:

答案 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