Lua中如何将多返回值函数结果直接作为另一函数入参无需中间变量
可行实现方案
完全可以实现无需中间变量的调用,以下是几种不同场景的可选方案:
- 方案1:直接利用Lua原生特性,零改动原有代码
Lua原生支持多返回值自动展开规则:当多返回值函数作为另一个函数调用的最后一个实参时,它的所有返回值会按顺序依次传入形参。你给出的场景完全可以直接写:addition(xy(10)) -- 直接返回28,运行完全正常注意:如果多返回值函数不在实参列表的最后一位,只会传递第一个返回值,剩余返回值会被自动丢弃。
- 方案2:调整xy返回值为数组,兼容非末尾传参场景
如果你需要把xy的返回值放到实参列表的非最后一位也能正常传递所有结果,可以调整xy的返回值为数组结构:
调用时搭配function xy(i) return {i, i + 8} endunpack(Lua 5.2+为table.unpack)展开即可:addition(unpack(xy(10))) -- 返回28 -- 非末尾传参场景也可正常使用 other_func(unpack(xy(10)), other_param) - 方案3:新增通用适配函数,完全不改动原有两个函数
如果你不想修改xy和addition的原有实现逻辑与返回值格式,可以新增一个极简的通用适配函数:
调用方式如下:-- 通用参数转发函数 local function apply(func, ...) return func(...) endapply(addition, xy(10)) -- 返回28
内容的提问来源于stack exchange,提问作者kite
相关产品推荐
相关产品推荐

