Lua , , "". , , , , Lua , . :
t = {}
key = { a = "a" }
t[key] = 4
key2 = key
...
t[key2] -- returns 4
, , , . key -, 4 , . .
... , . .
- , . true, "", false, . . :
equivalent({a=1},{a=1}) -- true
equivalent({a=1,b=2}, {a=1}) -- false
equivalent({a={b=1}}, {a={b=2}}) -- false
, , . , "" , . ; , .
local function equivalent(a,b)
if type(a) ~= 'table' then return a == b end
local counta, countb = 0, 0
for k,va in pairs(a) do
if not equivalent(va, b[k]) then return false end
counta = counta + 1
end
for _,_ in pairs(b) do countb = countb + 1 end
return counta == countb
end
. , , .
, t equivalent . .
t . , ; ( store). t , store, equivalent, .
:
local function equivalent(a,b)
...
end
local store = {}
t = setmetatable({}, {
__newindex = store,
__index = function(tbl, key)
for k,v in pairs(store) do
if equivalent(k,key) then return v end
end
end
})
:
t[{a = 1}] = 4
print(t[{a = 1}]) -- 4
print(t[{a = 1, b = 2}]) -- nil