用代码创建 Lua 数组

我一直在尝试获得像这样的数组:

["某个字符串"] = true,
["另一个字符串"] = true

通过使用代码。

我不知道如何创建一个数组。我尝试过:

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

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

我做错了什么?

原文链接 https://stackoverflow.com/questions/7514278

点赞
stackoverflow用户298661
stackoverflow用户298661

将下面翻译成中文并且保留原本的 markdown 格式

There's nothing wrong at all in the code you've posted.

在你发的代码中,没有任何错误。

2011-09-22 11:57:29
stackoverflow用户923327
stackoverflow用户923327

我通常像这样在 Lua 中创建数组:

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

如果这样无法工作,请确保您的 Lua 安装是最新的并且正常运行。

2011-09-22 11:57:34
stackoverflow用户68204
stackoverflow用户68204

当然,你所发布的代码本身没有问题。但是,它在交互式环境下可能会有一些奇怪的行为,这要取决于如何收集和提交代码块给解析器。

就目前代码的书写方式而言,你声明了一个本地变量 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)了解得不够多,无法权威地评论,但是在脚本中声明的本地变量可能在可见性和值持久性方面存在一些有趣的问题。如果他们对脚本进行了大量的沙箱处理,即使脚本中的全局变量在其他脚本中也可能无法看到。

2011-09-23 02:07:53