-- 带有默认值的table
-- 1.给每个table设定个新metatable, 设置metatable的__index返回一个默认值d
-- 2.第一种方法会消耗大量的metatable,如果只使用一个metatable,会大大地优化,但是不同的table有
-- 不同的默认值,这种方法将默认值存储在各个table的自己域中
-- 3.因为涉及到table中域的唯一性问题,当然"__"域在实际使用中也算唯一,可以另外用一个key保证域的唯一性
-- 4.保证统一性,将各个table以及他们的默认值保存在一个公共的table中,不过这个table需要是weak tab
-- 1.给每个table设定个新metatable, 设置metatable的__index返回一个默认值d
function setDefault(t, d)
setmetatable(t, {__index = function ()
return d
end})
end
-- 2.第一种方法会消耗大量的metatable,如果只使用一个metatable,会大大地优化,但是不同的table有
-- 不同的默认值,这种方法将默认值存储在各个table的自己域中
mt = {__index = function (t)
return t.__
end}
function setDefault(t, d)
t.__ = d
setmetatable(t, mt)
end
-- 3.因为涉及到table中域的唯一性问题,当然"__"域在实际使用中也算唯一,可以另外用一个key保证域的唯一性
mt = { __index = function (t) return t[key]}
key = {}
function setDefault (t,d)
t[key] = d -- 使用key,保证域的唯一性
setmetatable(t, mt)
end
-- 4.保证统一性,将各个table以及他们的默认值保存在一个公共的table中,不过这个table需要是weak tab