【发布时间】:2015-03-17 14:50:57
【问题描述】:
我对 Lua 很陌生,我正在尝试在我的程序开始时全局初始化一个表。在顶部,我有:
storage = {}
然后,我想在同一个文件中的函数内迭代此表中的元素。一个例子是:
local output
for item in storage do
output = output .. item
end
return output
在这种情况下,我得到:
attempt to call a nil value
在以for开头的那一行。
我也试过打印出storage[1]。在这种情况下,我得到:
attempt to index local 'storage' (a nil value)
有人可以简单地解释一下这里可能出了什么问题吗?
【问题讨论】:
-
您是否将
storage变量与尝试使用它的代码放在同一个文件中?如果不是,您是否遇到了模块边界?你在什么环境下使用lua? -
您可能想看看 for 循环的语法。它需要三个值:可调用对象、上下文和开始键。
pairs返回这样的...... -
在同一个文件中初始化。它在自定义框架内,但我已经完全复制了结构。我将其更改为 3 值 for 循环,我得到
attempt to get length of local 'storage' (a nil value) -
保罗的回答几乎总结了这个问题。无论出于何种原因,当您尝试对其进行迭代时,
storage都没有被赋予定义的值——这就是错误告诉您的内容。显示的脚本不足以准确说明为什么会这样,可能的原因很多。也许storage得到了nil,或者storage位于另一个文件中,在您尝试循环之前没有对其进行评估,或者函数环境发生了变化,或者更紧密的@ 987654334@ 范围在他们之间隐藏了全局等等。