メタテーブルを使用してすべてのインデックスをテーブルに変更できますか?

StackOverflow https://stackoverflow.com/questions/5035278

  •  15-11-2019
  •  | 
  •  

質問

テーブルへのすべてのインデックスが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です)。これを行うより良い方法はありますか、それとも私はただ何かを欠けているのですか?

役に立ちましたか?

解決

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top