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

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

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

local x = setmetatable({}, mt)

x.y = 5

1 ответ

Решение

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

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

Другие вопросы по тегам