gpt4 book ai didi

lua - __index 元方法中的无限递归

转载 作者:行者123 更新时间:2023-12-04 02:52:35 24 4
gpt4 key购买 nike

据我所知,lua 不会调用 __index 除非在表中找不到该键,所以我有该代码并且它在 __index 部分遭受无限递归,我没有得到因为 __index 函数中使用的两个值已经存在于表中!?

这基本上是一个测试脚本,用于尝试将表的大小保存在内存中,以便在调用 # 时检索

    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)

最佳答案

你有两个错别字:__index__pairs 函数都包含 originalKey 而不是 originalKey.

关于lua - __index 元方法中的无限递归,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17367881/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com