灰气球

灰气球

Lua 对象默认属性

Lua
117
2017-07-19
  • 属性数量少,用第一种方式实现
  • 属性数量多,用第二种方式实现

方式一

local defualts = {}
setmetatable( defaults , { __mode = "k" } )
local mt = { __index = function(t) return deaults[t] end}
function setDefault( t , d )
defaults[t] = d
setmetatable( t , mt )
end

方式二

local metas = {}
setmetatable( metas , { __mode = "v" } )
function setDefault( t , d )
local mt = metas[d]
if mt == nil then
    mt = { __index = function() return d end}
    metas[d] = mt    -- 备忘录
end
setmetatable(t,mt)
end