用元表实现只读表(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
效果:
效果:
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 看帖回帖是一种美德!
看帖回帖是一种美德!
页:
[1]