1

在我当前的项目中,我试图通过在我的main.lua. 然后,我需要第三个文件,该文件使用我试图在项目中添加的全局文件;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')

测试1.lua

test1 = {}
function test1:hello()
   print("hello")
end

测试2.lua

module('test2')

test1:hello()
4

2 回答 2

5

在 main.lua 中:

require("test2.lua")

应该:

require("test2")

在 test2.lua 中,我必须将 package.seeall 作为第二个参数传递给 module() 以便它可以看到 test1 中的值

module('test2', package.seeall)
test1:hello()
于 2012-04-09T21:05:58.207 回答
0

我刚刚测试了代码(在普通的 Lua 5.1 中),它对我有用(虽然我不得不替换require('test2.lua')require('test2')

可能是你的环境有问题。你在哪里执行这个 Lua 代码。它允许全局声明吗?

如果是,那么听起来好像您并没有完全按照您在问题中所说的那样做。

检查以下内容:

  • dofile('test1.lua')之前真的执行过require('test2.lua')
  • 变量名是可以的(比如你没有写tset1而不是test1在某个地方)
于 2012-04-09T20:56:41.503 回答