我知道我可以使用rawset
解决此问题,但我只是想知道为什么以下代码会导致C堆栈溢出。
local mt = {
__newindex = function(self, key, value)
self[key] = value
end
}
local x = setmetatable({}, mt)
x.y = 5
答案 0 :(得分:4)
在对metamethod __newindex
的调用中,self[key] = value
再次以递归方式调用metamethod __newindex
,直到堆栈溢出。