CHUAN2 DEV ENGINE
996 正版授权研发中心 · 360 授权合作教学中心 · 抖音传奇直播合作授权 · 快手推广运营商授权
OFFICIAL LICENSED ACADEMY 查验官方授权证书 →
// 威海旷世互娱教学基地 · 技术文章
进阶实战游戏功能996引擎

Lua+相等比较:rawequal绕过元方法的本质

2026-09-29 13:16 作者:996 技术组 996引擎Lua教程传奇脚本进阶实战游戏功能996引擎

【语法算法】

交换的本质就这一行:

lua
a, b = b, a

右侧先全求值再一次性赋给左侧——交换的全部机制就这一行。不需要临时变量,Lua 的多重赋值天然支持交换。今天拆开。

一、求值、交换、扩展三段

交换的三段。求值:Lua 先把等号右边的所有表达式逐个求值——求值的顺序是从左到右——所有值求完了存在一个临时区域里。交换:求值完成后 Lua 把临时区域里的值一次性赋给等号左边的变量——赋值的顺序也是从左到右——因为右边已经全部求完了,赋值顺序不影响结果。扩展:三个变量轮换 a, b, c = b, c, a 同样一行搞定——多重赋值的左值和右值个数可以不同——多出来的右值被丢弃,多出来的左值赋 nil。三段连起来:多重赋值玩的是"右侧的隔离求值"——右侧在赋值前就全部算完了,左侧的变量变化不影响右侧的结果——这就是不需要临时变量的原因。

mermaid
graph TD
    A["a=1, b=2"] --> B["右侧求值"]
    B --> C["b的值=2"]
    B --> D["a的值=1"]
    C --> E["临时区: [2, 1]"]
    D --> E
    E --> F["赋值: a=2, b=1"]
    F --> G["交换完成"]

二、交换的正确写法

lua
local a, b = 1, 2
a, b = b, a
print(a, b)  -- 2, 1

local x, y, z = "甲", "乙", "丙"
x, y, z = z, x, y
print(x, y, z)  -- 丙 甲 乙

三变量的轮换赋值是多重赋值的进阶用法——z, x, y 的右侧顺序决定了轮换的方向——右移一位和左移一位只差右侧变量的排列顺序。

三、求值的顺序与副作用的坑

右侧先全求值是多重赋值的铁律——如果右侧的表达式有副作用(比如函数调用修改了全局变量),副作用发生在赋值之前——副作用和赋值的顺序不一致时就会出 bug。和临时变量的分账写清楚:C 系语言的交换需要临时变量 temp = a; a = b; b = temp——因为 C 的赋值是逐条执行的,右侧的 b 在 a 被覆盖后已经是旧 a 的新值——Lua 的多重赋值天然避免了这个问题——右侧先全求值的规则是语言层面保证的,不是编码习惯。最后一条给从 C 转过来的同学:Lua 的 a, b = b, a 和 C 的 swap(&a, &b) 效果相同但机制完全不同——前者是语言级的多重赋值,后者是指针操作的函数调用——机制不同但效果相同,这正是 Lua 多重赋值的优雅之处。

作者履历与出处

本文由 996 技术组基于 996 引擎官方知识库与浮生梦老师课程体系整理。团队长期从事传奇类引擎 Lua 后端逻辑、客户端界面与商业版本交付,内容以官方知识库与真实项目为出处,按版本持续修订。

← 返回文章地图返回研学路径

幂尔框架 · 实战干货 · 接口调用

LATEST ARTICLES

全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →

进阶实战游戏功能

焚香:点一炷香,香烧着时三刀一回血

【游戏功能】 香烧着的时候,人心最定。焚香把这句老话做成了机制:点一炷八秒的香,香烧着的三刀一叩首——每叩一回,血回六点。香…

2026-10-01 13:57 996 技术组
进阶实战游戏功能

下战书:战期六秒,两边都往死里打

【游戏功能】 下一封战书是什么概念?是你和它同时签下"六秒内往死里打"的字据:你加三,它加四——它的刀更疼,你的刀也不再客气…

2026-10-01 13:57 996 技术组
进阶实战游戏功能

摘珠:它有两颗回血珠,摘一颗赚一颗

【游戏功能】 日志里躺着一条没人在意的细节:某只头目的治疗明细里,回血来源写着一颗珠子的名字——两颗珠子轮流替它回血,每两秒…

2026-10-01 13:57 996 技术组
进阶实战游戏功能

挑灯:灯油就是你的弹匣,烧的是时间

【游戏功能】 oil = oil - 1 —— 灯芯上两秒烧掉的一滴油,就是挑灯的全部家底:灯亮着,刀足十;油见底,刀软成五…

2026-10-01 13:57 996 技术组
进阶实战游戏功能

墨守:墨线画三笔,成阵挡一刀

【游戏功能】 守塔组出过一单静悄悄的失误:同一批怪,同样的守塔人,有的晚上一血没掉,有的被摸了三回——查录像才发现,守得住的…

2026-10-01 13:57 996 技术组
进阶实战游戏功能

匀气:刀刀要吃气,歇两口气才回满

【游戏功能】 为什么有些玩家越打越软?前二十刀刀刀十点,二十刀之后刀刀四点——装备没变,变的是气。匀气把这件事做成了明账:五…

2026-10-01 13:57 996 技术组