tibaiwan1888 发表于 2026-6-5 00:00:06

用元表实现只读表(ReadOnly)——保护配置数据不被污染

-- readonly.lua
-- 用元表拦截写操作,让配置表在运行时不可修改

local function readonly(t)
    return setmetatable({}, {
      __index    = t,
      __newindex = function(_, k, _)
            error("尝试修改只读表,键: " .. tostring(k), 2)
      end,
      __pairs    = function() return pairs(t) end,
      __len      = function() return #t end,
    })
end

-- 装备品质配置
local ITEM_QUALITY = readonly({
    = { name = "普通", color = "white",bonus = 0   },
    = { name = "精良", color = "green",bonus = 10},
    = { name = "稀有", color = "blue",   bonus = 25},
    = { name = "史诗", color = "purple", bonus = 50}, = { name = "传说", color = "orange", bonus = 100 },
})

return ITEM_QUALITY

效果:

tibaiwan1888 发表于 2026-6-5 00:02:22

效果:
local cfg = require("ItemQualityConfig")

print(cfg.name)   -- 输出: 稀有✓
cfg.name = "测试" -- 报错: 尝试修改只读表,键: 3✓

-- 实际使用
function GetItemBonusRate(qualityId)
    local q = cfg
    if not q then return 0 end
    return q.bonus
end

jz9005 发表于 2026-6-5 10:29:25

看帖回帖是一种美德!

tibaiwan1888 发表于 2026-6-5 14:44:54


看帖回帖是一种美德!
页: [1]
查看完整版本: 用元表实现只读表(ReadOnly)——保护配置数据不被污染