Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Lua 如何使用元表将每个索引更改为表?_Lua_Metatable - Fatal编程技术网

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

Lua 如何使用元表将每个索引更改为表?,lua,metatable,Lua,Metatable,我正在尝试编写一个元表,以便将表中的所有索引上移一个位置(即t[I]应返回t[I+1])。我需要这样做,因为表是使用索引1作为第一个元素定义的,但我必须与使用索引0作为第一个元素的程序接口。自从阅读了Lua中的编程之后,我认为我可以通过代理表实现我想要的,但我似乎无法让它工作。到目前为止,我有: t = {"foo", "bar"} local _t = t t = {} local mt = { __index = function(t, i)

我正在尝试编写一个元表,以便将表中的所有索引上移一个位置(即
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”:

感谢您指出这一点。那么,这一定是嵌入式解释器的问题。