4
내가 루아에서 회 기록 테이블이 싶습니다 (특히 2.0.3을 LuaJIT), 그래서 :루아의 Write Once 테이블?
local tbl = write_once_tbl()
tbl["a"] = 'foo'
tbl["b"] = 'bar'
tbl["a"] = 'baz' -- asserts false
이상적으로,이 그렇지 않은 일반 테이블 (쌍()와 ipairs (같은 기능을 것입니다) 일).
__newindex는 기본적으로 쉽게 구현할 수있는 것과 반대이며 쌍()과 ipairs()를 사용하여 프록시 테이블 패턴 작업을 수행하는 기술을 인식하지 못합니다. __pairs
및 __ipairs
은 이후 루아 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