Lua 语句边界靠语法推断、不强制分号——表达式未闭合就换行,下一行会被接进上一行:return 5 换行 -3 被解析成 return 5-3;函数调用写完换行再写括号,括号被接到上一行当调用参数。错误场景:
local function total()
return 5
-3
end
print(total())
输出 2 而不是 5——减 3 静默并入 return 表达式,没有任何警告。
跨行长表达式把运算符留在上一行行尾,让解析器自然续行;行首开括号前加显式分号隔离。规范写法。示例代码如下:
local msg = "击杀祖玛教主" ..
"掉落裁决之杖"
print(msg)
.. 留在行尾,续行意图明确——拼接与算术都不会被断行劫持。
三步验证:写 return 5 换行 -3 复现输出 2;把 -3 移回上一行行尾,输出恢复 5 且意图显式;再用换行括号复现误调用,加括号隔离或合并一行后确认调用对象符合预期。
同源歧义还有函数调用的换行括号。示例代码如下:
local function greet()
return "幸会"
end
local msg = greet
("沙巴克来客")
print(msg)
greet 换行后的 (msg) 被接上进调用——msg 拿到的是返回值"幸会"而不是一张表;跨行写调用要么合一行,要么上一行行尾显式收尾。
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
【语法】 一、隐蔽陷阱 任务链按 next 映射逐格跳转,怀疑某条链绕回了旧节点。用 visited 表记录走过的节点能判环…
【游戏】 一、业务场景 交易行里有人收了定金就消失,买家吃闷亏还没处查底细。信用分规则上线:每笔成交双方互评,好评加 2 分…
【语法】 一、隐蔽陷阱 运营报表里"截止第 3 关的最高分"显示 40,可那一批数据里确实出过 120。数据没丢,问题出在统…
【游戏】 一、业务场景 玩家反映:花 30 金锭重随一件武器,好不容易出了一条攻击加成,下一轮重随又把它洗没了,连洗 8 次…
【语法】 一、隐蔽陷阱 把 1000 个金币打包成不超过 25 个包裹,单包容量多大才够?从 1 开始逐个容量去试要跑上千次…
【游戏】 一、业务场景 帮会仓库积了 80 万资金,帮众修装备要借钱,之前的写法是谁申请谁直接扣款,一周被冒领 12 万。资…