Почему это вызывает переполнение стека C?

Я знаю, что могу решить эту проблему, используя rawset, но мне просто интересно, почему следующий код вызывает переполнение стека C.

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

local x = setmetatable({}, mt)

x.y = 5

person David    schedule 25.10.2014    source источник


Ответы (1)


Глубокая рекурсия.

Внутри вызова метаметода __newindex self[key] = value снова вызывает метаметод __newindex, рекурсивно, до переполнения стека.

person Yu Hao    schedule 25.10.2014
comment
А, я понимаю. Спасибо. - person David; 25.10.2014