チェーンルアのメタデータ

私は2つのライブラリL、Mが_G(それぞれmL、mMという名前)のメタテーブルを設定しようとしている状況があります。メタテーブル内の唯一のものは__indexです。

これらの2つのメタテーブルをどのように連鎖すれば、1つの__indexが失敗した場合でも、他のインデックスのインデックスを呼び出すことができます。

ベストアンサー

mlmM の両方を格納するメタテーブルを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)

コメントする

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です