【问题标题】:Initialising and using a global table初始化和使用全局表
【发布时间】: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@ 范围在他们之间隐藏了全局等等。

标签: lua lua-table


【解决方案1】:

您没有显示整个脚本,但很明显,storage 值在您初始化和使用 for item in storage do 之间的某个位置被重置,因为如果它保留该值,您会得到一个不同的错误:attempt to call a table value .

您需要在循环中使用 ipairspairs 函数 -- for key, item in pairs(storage) do -- 但您首先需要修复任何重置 storage 的值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-17
    • 2011-07-20
    • 1970-01-01
    • 2016-03-27
    • 2017-06-21
    • 2014-12-20
    • 2011-10-08
    • 2015-07-30
    相关资源
    最近更新 更多