开发者

How can I change every index into a table using a metatable?

开发者 https://www.devze.com 2023-02-10 23:52 出处:网络
I\'m trying to write a metatable so that all indexes into the table are shifted up one position (i.e. t[i] should return t[i+1]). I need to do this because the table is defined u开发者_如何学编程sing

I'm trying to write a metatable so that all indexes into the table are shifted up one position (i.e. t[i] should return t[i+1]). I need to do this because the table is defined u开发者_如何学编程sing index 1 as the first element, but I have to interface with a program that uses index 0 as the first element. Since reading Programming in Lua, I think that I can accomplish what I want with a proxy table, but I can't seem to get it working. So far, I have this:

t = {"foo", "bar"}  
local _t = t  
t = {}  
local mt = {  
    __index =   function(t, i)  
                    return _t[i+1]  
                end  
}
setmetatable(t, mt)

However, this does not create the expected result. In fact, it doesn't return any values at all (every lookup is nil). Is there a better way to do this, or am I just missing something?


t = {"foo", "bar"}  
local _t = t  
t = {}  
local mt = {  
    __index =   function(t, i)  
                    return _t[i+1]  
                end  
}
setmetatable(t, mt)

print(t[0])

outputs "foo" for me when run here: http://www.lua.org/cgi-bin/demo

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号