【问题标题】:Lua create array by codeLua通过代码创建数组
【发布时间】:2011-11-22 18:40:26
【问题描述】:

我一直在尝试给我一个这样的数组:

["Some String"] = true,
["Some other string"] = true
etc

通过使用代码。

我没有任何关于如何创建数组的线索。我试过了:

local tempArray
tempArray = {}
tempArray["Some String"] = true

但这不起作用,它是 tempArray = nil。

我做错了什么?

【问题讨论】:

  • 您是否尝试以交互方式运行它? local 将该变量隔离到输入的那个块(行)。但在您的示例中,tempArray 将在下一行定义为全局。

标签: arrays lua


【解决方案1】:

您发布的代码没有任何问题。

【讨论】:

  • 奇怪的是,当我测试它时,数组仍然为零。
  • @Levisaxos:那么问题出在测试中。
【解决方案2】:

我一直在 Lua 中创建数组,例如:

local myArray = {
  ["Hello"]    = 'World',
  ["Testing"]  = '123'
}

如果它不能确保您的 Lua 安装是最新的并且可以正常工作,那应该可以。

【讨论】:

  • 当然静态数组就是这样制作的。但我的必须是动态的。
  • 你如何测试你的阵列?
  • 它是魔兽世界插件的一部分。在将其保存到变量时使用 local 使其始终为零。
【解决方案3】:

当然,您发布的代码没有任何问题。但是,它在交互式环境中可能会表现得很奇怪,具体取决于如何收集块并将其传递给解析器。

正如所写,您声明了一个本地tempArray,然后显然使用它。如果这些行被输入到交互式 Lua 提示符中,它将每一行作为一个单独的块,那么在第一行中创建的本地将被创建并丢弃。第二行将创建一个同名的全局变量,第三行将使用全局设置一个字段。你可以这样演示:

C:\Users\Ross>lua
Lua 5.1.4  Copyright (C) 1994-2008 Lua.org, PUC-Rio
> local tempArray
> tempArray = {}
> tempArray["Some String"] = true
>
> table.foreach(tempArray,print)
Some String     true
>
> print(type(_G.tempArray))
table
>

在这里,我已经证明了表tempArray 存在并且恰好有一个值为true 的键。通过打印_G.tempArray 的类型,我已经证明创建了一个全局变量。

通过使用do ... end 对强制交互式提示将整个块视为单个块,我们既创建并使用局部变量。不幸的是,在块的end 之后,本地现在超出了范围,再也看不到了。

C:\Users\Ross>lua
Lua 5.1.4  Copyright (C) 1994-2008 Lua.org, PUC-Rio
> do
>> local tempArray
>> tempArray = {}
>> tempArray["Some String"] = true
>> end
> print(type(_G.tempArray))
nil
> table.foreach(tempArray,print)
stdin:1: bad argument #1 to 'foreach' (table expected, got nil)
stack traceback:
        [C]: in function 'foreach'
        stdin:1: in main chunk
        [C]: ?
>

我对《魔兽世界》的了解不够,无法以权威的身份发言,但脚本中声明的本地人可能在可见性和价值持久性方面存在有趣的问题。如果他们使用大量脚本沙盒,即使脚本中的全局变量也可能对其他脚本不可见。

【讨论】:

    猜你喜欢
    • 2019-04-09
    • 2016-05-18
    • 1970-01-01
    • 2012-02-05
    • 1970-01-01
    • 1970-01-01
    • 2012-07-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多