私は2つのライブラリL、Mが_G(それぞれmL、mMという名前)のメタテーブルを設定しようとしている状況があります。メタテーブル内の唯一のものは__indexです。
これらの2つのメタテーブルをどのように連鎖すれば、1つの__indexが失敗した場合でも、他のインデックスのインデックスを呼び出すことができます。
ベストアンサー
ml
と mM
の両方を格納するメタテーブルを1つ持ち、
nil
を返す場合は、
local metatbl = {}
metatbl.tbls = {mL, mM};
function metatbl.__index(intbl, key)
for i, mtbl in ipairs(metatbl.tbls) do
local mmethod = mtbl.__index
if(type(mmethod) == "function") then
local ret = mmethod(table, key)
if ret then return ret end
else
if mmethod[key] then return mmethod[key] end
end
return nil
end
end
setmetatable(_G,metatbl)