Lua按代码创建数组

时间:2011-09-22 11:50:12

标签: arrays lua

我一直想给我一个像这样的数组:

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

使用代码。

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

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

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

我做错了什么?

3 个答案:

答案 0 :(得分:4)

您发布的代码中没有任何错误。

答案 1 :(得分:1)

我总是在Lua中创建数组,如:

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

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

答案 2 :(得分:0)

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

如上所述,您声明了一个本地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]: ?
>

我不太了解WoW与权威说话,但很可能在脚本中声明的本地人可能会遇到有关可见性和值持久性的有趣问题。如果他们使用了大量的脚本沙盒,那么即使脚本中的全局变量也可能对其他脚本不可见。