为什么这会导致C堆栈溢出?

时间:2014-10-25 06:19:01

标签: lua stack-overflow lua-table metatable meta-method

我知道我可以使用rawset解决此问题,但我只是想知道为什么以下代码会导致C堆栈溢出。

local mt = {
    __newindex = function(self, key, value) 
        self[key] = value 
    end
}

local x = setmetatable({}, mt)

x.y = 5

1 个答案:

答案 0 :(得分:4)

Deep Recursion

在对metamethod __newindex的调用中,self[key] = value再次以递归方式调用metamethod __newindex,直到堆栈溢出。