2011-09-22 50 views
0

创建数组我一直在试图让我一个数组是这样的:的Lua通过代码

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

使用代码。我不知道如何创建数组。我已经试过:

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

但是,这并不工作,它最高审计机关tempArray =零。

我在做什么错?

+3

您是否试图以交互方式运行? 'local'会将该变量隔离为输入的该块(行)。但在你的例子中,'tempArray'然后将在下一行被全局定义。 – BMitch

回答

4

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

+0

奇怪,当我测试它时,数组仍然为零。 –

+1

@Levisaxos:然后问题在测试中。 – Puppy

1

我总是创建的阵列中的Lua,如:

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

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

+0

ofcourse静态数组是这样制作的。但我的必须是动态的。 –

+0

你如何测试你的数组? – Nexerus

+0

它是魔兽世界插件的一部分。将它保存到变量中时使用本地使其始终为零。 –

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]: ? 
> 

我不知道有足够的了解魔兽世界权威说话,但很可能在一个脚本中声明当地人可能有知名度和值持续有趣的问题。如果他们使用大量的沙箱脚本,则脚本中的全局变量可能对其他脚本不可见。