メタテーブルを使用してすべてのインデックスをテーブルに変更できますか?
質問
テーブルへのすべてのインデックスが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
所属していません StackOverflow