2

我正在尝试编写一个元表,以便表中的所有索引都向上移动一个位置(即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)。有没有更好的方法来做到这一点,或者我只是错过了什么?

4

1 回答 1

3
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

于 2011-02-17T22:12:38.753 回答