Lua中三个点...的作用:可变参数函数用法详解
时间:2026-08-15 | 作者:深海捕梦者 | 阅读:0一、基础:... 表达式
在函数的参数列表中,... 被用作最后一个参数。
它表示该函数可以接受任意数量的额外参数。
function sum(...)
-- 1. 将所有可变参数打包到一个名为 'args' 的 table 中
local args = { ... }
local total = 0
-- 2. 像遍历普通 table 一样遍历参数
for i, v in ipairs(args) do
total = total + v
end
return total
end
print(sum(1, 2, 3)) -- 输出: 6
print(sum(10, 20, 30, 40)) -- 输出: 100
print(sum()) -- 输出: 0
解析:在函数内部,... 并不是一个变量。
它是一个表达式(Expression),代表所有传递给它的可变参数序列。
二、nil 的陷阱与专业工具
上面的 sum 函数看起来几乎没问题,但其实藏着一个容易忽略的坑。
只要参数里出现了 nil,解析就会在这里直接停住,后面那些参数也会一并丢失。
正因为如此,想把不定参数真正处理对,就得借助 select 和 table.pack 来完整解析。
local args = { 10, 20, nil, 40 }
-- ipairs(args) 在遇到 nil 后会停止
-- #args 的行为也可能不符合预期
1. select('#', ...):获取参数的真实数量
select 函数是一个强大的内建工具。
当它的第一个参数是字符串 '#' 时,会返回传递给它的可变参数的确切数量,无视 nil。
function count_args(...)
-- 这才是获取可变参数数量的最可靠方法
local arg_count = select('#', ...)
return arg_count
end
print(count_args(1, "hello", nil, true)) -- 输出: 4
2. table.pack(...):安全地打包参数
从 Lua 5.2 起,官方给出了一个更稳妥的打包方案:table.pack。
它的作用和前者一样,都是把所有参数收进一个 table 里。
不同的是,它会额外带上一个 n 字段。
这个字段用来记录参数的实际个数,也就是 select('#', ...) 返回的结果。
function safe_sum(...)
-- 使用 table.pack 进行安全打包
local args = table.pack(...)
local total = 0
-- 使用 args.n 来进行安全的循环,而不是 ipairs
for i = 1, args.n do
local v = args[i]
print(v) -- 打印每个参数以进行调试
-- 确保我们只对数字进行相加
if type(v) == "number" then
total = total + v
end
end
return total
end
print(safe_sum(1, 2, nil, 4)) -- 输出: 7 (nil 被安全地跳过了)
结语
点个赞,关注我获取更多实用 Lua 技术干货!如果觉得有用,记得收藏本文!
免责声明:文中图文均来自网络,如有侵权请联系删除,心愿游戏发布此文仅为传递信息,不代表心愿游戏认同其观点或证实其描述。
相关文章
更多-
- 海尔消毒柜屏幕锁定解除方法步骤详解
- 时间:2026-08-23
-
- 海尔冰箱童锁密码忘记解锁方法步骤详解
- 时间:2026-08-23
-
- 已知密码如何解除PDF限制并检查解锁状态
- 时间:2026-08-17
-
- 极氪APP上线跨境守护功能,支持车主自助解锁
- 时间:2026-08-15
-
- 追逐卡蕾多约会玩法解锁条件与步骤详解
- 时间:2026-07-31
-
- 关守神全结局解锁及全CG收集攻略
- 时间:2026-07-30
-
- 地狱公主生命之韧二解锁攻略分享
- 时间:2026-07-30
-
- 妄生余地与不悔成就解锁攻略
- 时间:2026-07-30
精选合集
更多大家都在玩
大家都在看
更多-
- 金山毒霸怎么查杀病毒
- 时间:2026-10-17
-
- 金舟PDF编辑器怎么编辑PDF文件
- 时间:2026-10-17
-
- 老毛桃U盘启动盘怎么制作
- 时间:2026-10-17
-
- 得力OCR文字识别怎么提取图片文字
- 时间:2026-10-17
-
- 超级捕快怎么录制电脑屏幕
- 时间:2026-10-17
-
- 崩坏3?时序之律者·寻梦者?角色定位及机制介绍
- 时间:2026-10-17
-
- 《雾海之下》浪花游鲨介绍
- 时间:2026-10-17
-
- 《搞笑找茬脑洞》家庭烧烤帮找到12种食物来烧烤通关攻略
- 时间:2026-10-17
