一、一行代码拆解:__eq = function(a, b) return a.id == b.id end —— 两张表直接比 == 永远不等(比的是引用);挂上 __eq 元方法,相等的标准由业务说了算。
二、底层原理:__eq 只在两个操作数都是表且类型一致时触发,返回值转成布尔;它改变 == 的语义但不改变引用本质,需要严格"同一件"判断时仍用 rawequal。
三、正确代码:
错误写法。示例代码如下:
local a = {id = 7, lv = 3}
local b = {id = 7, lv = 3}
sendmsg(actor, 1, tostring(a == b)) -- false,比的是引用
正确写法。示例代码如下:
local mt = {__eq = function(x, y)
return x.id == y.id -- 同id视为同一装备
end}
local a = setmetatable({id = 7, lv = 3}, mt)
local b = setmetatable({id = 7, lv = 5}, mt)
sendmsg(actor, 1, "裁决之杖相同判定:" .. tostring(a == b))
四、引擎验证:同 id 不同强化级的 500 次比对:默认版全部 false;__eq 版 500 次全 true,"同一件"的业务语义成立。
五、FAQ:问:想区分同 id 不同强化怎么办?答:把强化级也纳入 __eq 判定字段,标准随业务调整。
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
【语法】 一、机制原理 隐蔽的坑:往一个全局信箱表里写了一个值,界面居然自己刷新了——排查半天才发现元表里挂着监听,写入本身…
【游戏】 一、规则机制 抛个坑:精英固定点位固定整点刷新,蹲守团掐秒包场,散人永远摸不到边,野区矛盾激化。轮值机制重新洗牌:…
【语法】 一、机制原理 抛个坑:同屏 500 个单位,每帧两两算距离要 25 万次运算,帧率直接躺平——怎么只算身边的几十个…
【游戏】 一、规则机制 线上事故:传送全免费上线一个月,主城成了空城,野外补给商栈无人问津,倒货党借免费跨图搬运低买高卖套利…
【语法】 一、机制原理 线上事故:前端连续游玩两小时内存翻倍,切多少次界面都降不下去,最终闪退。复盘几乎都落在三类滞留:一是…
【游戏】 一、规则机制 一行定骨架:w = WEATHER[math.random( WEATHER)]。天气系统每 30 …