在处理lua表的索引时遇到一点困难

我是 Lua 的新手,想要理解以下语法:

init_state_global = some_integer
rnn_state = {[0] = init_state_global}

我按照 Python 的习惯理解,认为第一个元素的索引为 0,该元素的值等于变量 init_state_global。

然而,当我执行如下代码时:

print(rnn_state[0])

输出的结果是:

>> nil

请问有人能帮我解释一下这段代码的含义吗?

rnn_state = {[0] = init_state_global}
点赞
用户3924687
用户3924687

在 Lua 中,在表达式设置(=)之前,在数组名称后执行。此外,Lua 使用基于1的索引

init_state_global = some_integer
rnn_state = {}
rnn_state[1] = init_state_global;

也许您忘记声明一个变量:

init_state_global = 5
rnn_state = {[0] = init_state_global}
print(rnn_state[0])
2016-01-09 21:28:47
用户4380945
用户4380945

原来比我想象的要容易。

尽管Lua从1开始索引,但你可以随意将索引设置为零。

所以

rnn_state = {[0] = init_state_global}

就是这个意思,

rnn_state[0] = init_state_global

但是,我之前说过

print(rnn_state[0])是等于
>> nil

那是因为我忘记在代码中声明变量(而不是在初始线程中)。

init_state_global = some_integer

:(

因此,如果你正确声明了变量,则以下语句

print(rnn_state[0])

将返回

>> some_integer

如果您之前声明了

init_state_global = some_integer

还有一件事(对于习惯于Python列表的人可能不是很明显),那就是

rnn_state = {}
rnn_state[0] = 4

rnn_state = {[0] = 4}

相同。

2016-01-09 21:37:53