Lua 初始化并使用全局表

Lua 初始化并使用全局表,lua,lua-table,Lua,Lua Table,我对Lua非常陌生,我正试图在我的项目一开始就在全球范围内初始化一个表。在顶部,我有: storage = {} 然后,我想在同一个文件中的函数中迭代该表中的元素。一个例子是: local output for item in storage do output = output .. item end return output 在这种情况下,我得到: attempt to call a nil value 在以for开头的行上 我还尝试打印出存储[1]。在这种情况下,我得到:

我对Lua非常陌生,我正试图在我的项目一开始就在全球范围内初始化一个表。在顶部,我有:

storage = {}
然后,我想在同一个文件中的函数中迭代该表中的元素。一个例子是:

local output
for item in storage do
    output = output .. item
end
return output
在这种情况下,我得到:

attempt to call a nil value
在以for开头的行上

我还尝试打印出存储[1]。在这种情况下,我得到:

attempt to index local 'storage' (a nil value)

有人能简单地解释一下这里可能有什么问题吗?

您没有显示整个脚本,但很明显,在初始化和使用in for item in storage do之间的某个时间,存储值会被重置,因为如果它保留该值,您会遇到另一个错误:尝试调用表值


您需要在循环中使用ipairs或pairs函数(对于键,pairsstorage中的项),但首先需要修复重置存储值的任何内容。

您是否在与尝试使用该存储变量的代码相同的文件中初始化该存储变量?如果没有,您是否达到模块边界?您在什么环境中使用lua?您可能想看看for循环的语法。它需要三个值:可调用、上下文和开始键。pairs返回这样的…它在同一个文件中初始化。它在一个自定义框架内,但我完全复制了结构。我将其更改为3值for循环,并尝试获取本地“存储”的长度a nil值paul的答案基本上总结了这个问题。无论出于何种原因,当您尝试对存储进行迭代时,存储没有给定定义的值——这就是错误告诉您的。你的剧本没有足够的篇幅来说明原因,可能的原因有很多。可能是由于您没有预料到的原因导致存储为零,或者存储位于不同的文件中,在您尝试循环之前没有对其进行评估,或者可能是功能环境发生了更改,或者是它们之间的本地存储范围变窄,从而隐藏了全局存储范围,等等。