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 -- 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

您将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。

这会让事情变得更清楚吗?

G[1][2][3]=10——错误,为什么?G[1]中断

它在G[1][2]上中断,因为G[1]是数字,而不是表。尝试代理表:http://www.lua.org/pil/13.4.4.htmlCCD_ 14是回退。

相关内容

  • 没有找到相关文章