Lua多维数组__index元表错误

我正在尝试创建动态多维数组,但我不理解元表的工作原理。就像它有一个错误一样,它不知道如何获取设置一个值。这是一个示例:

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 -- 添加10
  G[1][2][3] = 10 -- 错误,为什么?在G[1]上中断

  --但是当我这样做时
  G[1][2][3] = 10 -- 添加10
  G[1] = 10 -- 擦除整个表并添加10
  print(G[1][2][3]) -- 错误
end
点赞
用户3574628
用户3574628

你把G[1]设为1010不是一个表,所以G[1][2][3]没有任何作用。

顺便说一下,只有当键指向nil时,才会调用__index。 如果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。

这让事情变得更清晰了吗?

2016-07-18 18:46:35
用户6544989
用户6544989
G[1][2][3] = 10 -- 错误,为什么?在 G[1] 处出现错误

这是因为 G[1] 是数字,而不是表格所导致的错误。
尝试使用代理表:[http://www.lua.org/pil/13.4.4.html](http://www.lua.org/pil/13.4.4.html),其中的 `__index` 是回退。
2016-07-18 18:48:39