Я в некотором роде новичок в Lua (пока не особо много с этим делаю) и пытаюсь сосредоточиться на метатаблицах.Раньше они работали, но сейчас (через несколько месяцев) я столкнулся с чем-то действительно странным.
Что должен печатать этот скрипт при запуске?
__mt = {}
__mt.__index = function(table, key)
print("In __index")
return 99
end
test = {}
test.x = 5
setmetatable(test, __mt)
print(test.x)
Лично я бы ожидалчтобы напечатать «In __index» (из метаметода), за которым следует 99. Однако, когда я запускаю его, я получаю 5. Ничто из того, что я делаю, не может запустить метаметод индекса.Это просто действует так, как будто я использую rawget()
.
Любопытно, что добавление
print(getmetatable(test).__index(test, "x"))
сделает правильную вещь.Метатабель есть, __index()
- это правильно, просто его не вызывают.
Это ошибка или я просто делаю что-то глупое?Я не могу сказать.