Lua中如何从函数返回多参数?捕获可变参数遇报错求助
解决Lua中包装函数返回值、丢弃前N个参数并返回剩余可变参数的问题
问题分析
你遇到的错误源于两个核心问题:
- Lua不允许在局部变量声明里将
...作为独立"变量名"使用,且arg是Lua 5.0的废弃特性,现代Lua(包括OpenComputers使用的版本)已改用...直接访问可变参数。 - 原代码试图用
arg获取剩余参数,但当前环境中不存在该变量,导致无法正确返回值。
可行解决方案
方案1:直接跳过前N个参数返回剩余值
如果不需要保留中间的from变量,最简洁的方式是用select函数跳过前5个参数,直接返回后续所有值:
return select(6, computer.pullSignal("modem_message"))
select(n, ...)会返回从第n个开始的所有参数,这里6表示跳过前5个参数,返回第6个及以后的所有结果。
方案2:保留中间变量同时返回剩余参数
如果需要保存from这类中间值,正确写法是解构后直接返回...(它代表剩余的所有返回值):
local _, _, from, _, _, ... = computer.pullSignal("modem_message") -- 此处可使用from变量执行其他逻辑 return ...
这里的...会自动捕获computer.pullSignal返回的、除前5个之外的所有剩余参数,直接返回即可。
方案3:用表存储所有返回值后截取返回
如果需要对返回值做更复杂处理,可以先把所有返回值存入表,再截取指定范围返回:
local allResults = {computer.pullSignal("modem_message")} -- 从第6个元素开始返回所有剩余值 return table.unpack(allResults, 6)
这种方式适合需要先修改剩余参数再返回的场景。
内容的提问来源于stack exchange,提问作者OpenCompuers-User
相关产品推荐
相关产品推荐

