Почему это вызывает переполнение стека 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
снова, рекурсивно, пока стек не переполнится.