如何使用元表将每个索引更改为表?

我正在尝试编写一个metatable,以便表中的所有索引都向上移动一个位置(即
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
)。有没有更好的方法来做到这一点,还是我只是缺少一些东西?     
已邀请:
t = {"foo", "bar"}  
local _t = t  
t = {}  
local mt = {  
    __index =   function(t, i)  
                    return _t[i+1]  
                end  
}
setmetatable(t, mt)

print(t[0])
在我这里运行时为我输出“foo”:http://www.lua.org/cgi-bin/demo     

要回复问题请先登录注册