Indexing 卢阿,2-dim。数组元表在“0”时获取值;“无”;
我试图使用Indexing 卢阿,2-dim。数组元表在“0”时获取值;“无”;,indexing,lua,metatable,Indexing,Lua,Metatable,我试图使用\uu index将新表添加到“G”,我需要从表A中获取nil值,并将其放入G。当A表中的值为nil时,我得到一个错误“堆栈溢出”。矩阵是对称的,我将值从垂直翻转到水平。我不知道如何解决这个问题。您的\u index函数将重新调用相同的元方法-因此堆栈溢出。您需要使用rawget()a larawget(rawget(a,j),i) 我将把它作为读者实施适当空检查的练习。添加了“rawget(rawget(A,j),I)”,工作得非常出色。谢谢! local A = {{16},
\uu index
将新表添加到“G”,我需要从表A
中获取nil
值,并将其放入G
。当A
表中的值为nil
时,我得到一个错误“堆栈溢出”。矩阵是对称的,我将值从垂直翻转到水平。我不知道如何解决这个问题。您的\u index
函数将重新调用相同的元方法-因此堆栈溢出。您需要使用rawget()
a larawget(rawget(a,j),i)
我将把它作为读者实施适当空检查的练习。添加了“rawget(rawget(A,j),I)”,工作得非常出色。谢谢!
local A = {{16},
{4,10},
{4,4,6},
{nil,2,-2,4}} -- nil
local n = #A
local G = {}
local mt = {}
mt.__index = function(self, i)
-- when it goes throw for-loop it brakes when value in "A" is **nil**
-- also brakes when i do print(G[4][1])
self[i] = setmetatable({}, {__index = setmetatable(A[i], {__index = function(s, j) return A[j][i] or 0 end})})
return self[i]
end
setmetatable(G, mt)
print(G[1][3]) -- returns 4
print(G[1][4]) -- returns 0
for j=1, n do
for i=j, n do
-- G[i][j] = G[i][j]
io.write(G[i][j], "; ") -- on i=4 i get error, loops in __index...
end
end