Lua 结合使用dofile和require

Lua 结合使用dofile和require,lua,Lua,在我当前的项目中,我试图通过在main.lua的最顶端执行dofile来全局地向我的项目添加一些语法。然后我需要第三个文件,该文件使用我试图在项目中添加的全局文件;但是,我在尝试索引全局值时收到一个错误 例如,在下面的示例中,我使用dofile试图使test1:hello在我的项目中全局可用,但是在要求test2.lua的过程中,我收到了错误: PANIC: unprotected error in call to Lua API (test2.lua: attempt to index glo

在我当前的项目中,我试图通过在main.lua的最顶端执行dofile来全局地向我的项目添加一些语法。然后我需要第三个文件,该文件使用我试图在项目中添加的全局文件;但是,我在尝试索引全局值时收到一个错误

例如,在下面的示例中,我使用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:

require("test2.lua")
dofile'test1.lua' 需要“test2” test1.lua

test1={} 函数test1:hello 你好 终止 test2.lua

模块“test2” 测试一:你好
我刚刚在普通的Lua5.1中测试了代码,它在我这边起了作用,但我不得不用require'test2'替换require'test2.Lua'

也许这是你的环境中的一个问题。您将在何处执行此Lua代码。它允许全局声明吗

如果是的话,那么听起来好像你没有完全按照你在问题中所说的去做

检查以下内容:

dofile'test1.lua'实际上是在需要'test2.lua'之前执行的 变量名没有问题。例如,您没有在某些地方编写tset1而不是test1
我刚刚在普通的Lua5.1中测试了代码,它在我这边起了作用,但我不得不用require'test2'替换require'test2.Lua'

也许这是你的环境中的一个问题。您将在何处执行此Lua代码。它允许全局声明吗

如果是的话,那么听起来好像你没有完全按照你在问题中所说的去做

检查以下内容:

dofile'test1.lua'实际上是在需要'test2.lua'之前执行的 变量名没有问题。例如,您没有在某些地方编写tset1而不是test1 在main.lua中:

require("test2.lua")
应该是:

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

module('test2', package.seeall)
test1:hello()
在main.lua中:

require("test2.lua")
应该是:

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

module('test2', package.seeall)
test1:hello()

你确定你就这么改了吗?我不小心加上了。最后是lua?在文件的开头和结尾添加了输入和退出打印的确切示例给了我:输入主输入测试1退出测试1输入测试2 lua:./test2.lua:4:尝试索引全局“test1”一个空值我是肯定的,这就是我更改的全部内容。其余的,我从你的帖子上复制粘贴。你的环境是什么?你是在一个电子游戏里,引擎里,还是什么?你确定这就是你所改变的一切吗?我不小心把它加进去了。最后是lua?在文件的开头和结尾添加了输入和退出打印的确切示例给了我:输入主输入测试1退出测试1输入测试2 lua:./test2.lua:4:尝试索引全局“test1”一个空值我是肯定的,这就是我更改的全部内容。其余的,我从你的帖子上复制粘贴。你的环境是什么?你是在一个电子游戏里,一个引擎里,还是什么?看起来我需要那个软件包。我没有意识到模块'test2'调用会导致这个问题。事实证明,删除模块声明同样有效。谢谢看来我需要那个包裹。我没有意识到模块'test2'调用会导致这个问题。事实证明,删除模块声明同样有效。谢谢