据我所知lua不会调用 __ index ,除非在表中找不到密钥所以我有那个代码,它在__index部分遭受无限递归,我没有得到因为__index函数中使用的两个值已经存在于表中!?
这基本上是一个测试脚本,用于尝试在调用#时将内存中的表大小保存为retreive
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)
答案 0 :(得分:4)
你有两个拼写错误:__index
和__pairs
函数都包含oroginalKey
而不是originalKey
。