何时更改lua表值?

时间:2016-11-28 09:14:22

标签: list hash lua lua-table

三个循环但结果不同,为什么? (在lua 5.1中)

1

local a = {{b=5}, {b=4}}
for k,v in ipairs(a) do
   v.b = v.b + 1
end

2。

local a = {["b"]=5, ["bb"]=4}
for k,v in pairs(a) do
   v = v + 1
end

3。

local a = {5, 4}
for k,v in ipairs(a) do
   v = v + 1
end
  • 1 真正为表a中的所有元素添加1,但 2 & 3 不会改变任何内容。的为什么吗
  • 我使用 chunkspy 来查看这三个块的操作码,发现在第一个块中,在更改表a中的值后,它具有可设置的操作,但阻止 2 3 没有。阻止 2 & 3 只需添加5 5 261; 1 (意味着将1添加到寄存器5但不将值保存到表中),为什么会发生这种情况?

1 个答案:

答案 0 :(得分:1)

此处的问题是,v对中的k,v是对值的引用,而不是密钥。

这意味着,v=只修改了局部变量v,并且不会影响表本身。你可以改为a[k]=v+1,它带有2和3的预期结果。

然而,在第一种情况下,v是对表的引用。在lua中,对表的所有引用都进行了修改表或对该表的任何引用。 This问题包含有关References Vs Values主题的一些有用信息。