3
據我所知,lua不要叫__index,除非在表中找不到密鑰,所以我有那個代碼,它在__index部分遭受無限遞歸,我沒有得到因爲在__index函數中使用的兩個值已經存在於表中!__index metamethod中的無限遞歸
這基本上是試圖挽救該表的大小在內存中檢索時#被稱爲
do
local lenKey,originalKey = {},{}
fastKey = {}
fastKey.__len = function(t) return t[lenKey] end
fastKey.__index = function (t,k)
t[lenKey] = t[lenKey] +1
return t[oroginalKey][k]
end
fastKey.__newindex = function(t,k,v) t[originalKey][k] = v end
fastKey.__pairs = function()
return function (t, k)
return next(t[oroginalKey], k)
end
end
function fastLen(t)
local proxy = {}
local c = 0
for _ in pairs(t) do
c=c+1
end
proxy[lenKey] = c
proxy[originalKey] = t
setmetatable(proxy,fastKey)
return proxy
end
end
n = fastLen{1,2,3,x=5}
--n:insert(1) -- here the __index is called and gets stackoverflow
print(#n)
嘗試'originalKey'而不是'oroginalKey'。 –
嗯,這是跛腳。我修改了腳本很多次,從來沒有看到它,謝謝你的幫助,似乎還有其他的邏輯錯誤,我必須解決。 –
別擔心。發生到最好;)。 –