4
ように私は、(特にLuaJIT 2.0.3)のLuaでのライトワンステーブルを持っているしたいと思います:理想的には、これはそうでない場合は((通常のテーブルのようなペア()とipairsを機能するであろうルアの書き込み可能なテーブル?
local tbl = write_once_tbl()
tbl["a"] = 'foo'
tbl["b"] = 'bar'
tbl["a"] = 'baz' -- asserts false
)仕事)。
__newindexは、これを簡単に実装したいと思っているものと基本的に反対です。プロキシテーブルパターンをペア()とipairs()で作成する方法はわかりません。 __pairs
と__ipairs
のみ以降のLua 5.2から働くこと
function write_once_tbl()
local T={}
return setmetatable({},{
__index=T,
__newindex=
function (t,k,v)
if T[k]==nil then
T[k]=v
else
error("table is write-once")
end
end,
__pairs= function (t) return pairs(T) end,
__ipairs= function (t) return ipairs(T) end,
})
end
注:
私はプロキシテーブルを知っていますが、pairs()やipairs()では扱いません。私はちょうどあなたのコードスニペットを試してペア()とipairs()がそれで動作しないことを確認しました。 – MikeMx7f
@ MikeMx7f、彼らはルア5.2と5.3で行います。 – lhf
Lua 5.3を使用しているコードスニペットをhttps://www.lua.org/cgi-bin/demoでテストしました。 – MikeMx7f