Я пытаюсь написать метатаблицу, чтобы все индексы в таблице были сдвинуты вверх на одну позицию (т.е. t[i]
должно возвращать t[i+1]
). Мне нужно сделать это, потому что таблица определена с использованием индекса 1 в качестве первого элемента, но мне нужно взаимодействовать с программой, которая использует индекс 0 в качестве первого элемента. После прочтения «Программирование на Lua» я думаю, что могу добиться того, чего хочу, с прокси-таблицей, но, похоже, я не могу заставить ее работать. Пока что у меня это:
t = {"foo", "bar"}
local _t = t
t = {}
local mt = {
__index = function(t, i)
return _t[i+1]
end
}
setmetatable(t, mt)
Однако это не создает ожидаемого результата. На самом деле он вообще не возвращает никаких значений (каждый поиск равен nil
). Есть ли лучший способ сделать это, или я просто что-то упустил?