2

テーブル内のすべてのインデックスが1つ上の位置にシフトされるように、メタテーブルを作成しようとしています(つまり、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 に答える