Lua多维数组__index metatable错误

时间:2016-07-18 18:32:36

标签: multidimensional-array lua

我正在尝试制作动态多维数组,但我在理解metatables的工作方式时遇到了问题。它有像bug一样,并且不了解如何获得设置一个值。这是一个例子:

function test(A)
  local G = {}
  local mt = {} 
  mt.__index = function(self, i)
    self[i] = setmetatable({}, mt)
    return self[i]
  end

  setmetatable(G, mt)

  G[1] = 10 -- adds 10
  G[1][2][3] = 10 -- error, why?breaks on G[1]

  --but when i do it like this
  G[1][2][3] = 10 -- adds 10
  G[1] = 10 -- erases whole table and adds 10   
  print(G[1][2][3]) -- error  
end

2 个答案:

答案 0 :(得分:2)

您将G[1]设置为1010不是表,因此G[1][2][3]无法正常工作。

仅供参考,__index仅在密钥指向nil时调用。如果G[1] == 10,则G[1][2]无法调用__index

我怀疑您认为G[1][2][3]G[1]是两个完全独立的实体。他们不是。当你写:

G[1][2][3] = 42

......它被解析为:

((G[1])[2])[3] = 42

换句话说,在表G中,您访问索引1,然后在该表中,您访问索引2,然后在该表中,您指定索引3。

这会让它更清楚吗?

答案 1 :(得分:0)

  

G [1] [2] [3] = 10 - 错误,为什么?打破G [1]

它在G[1][2]上休息,因为G [1]是数字,而不是表格。 尝试代理表:http://www.lua.org/pil/13.4.4.html __index是后备。