function - 合并两个可变函数结果

标签 function lua variadic-functions variadic

假设我有两个这样的可变参数函数:

function a(num)
  if num == 1 then
    return 1
  else
    return 1, 2
  end
end    

function b(num)
  if num == 1 then
    return 1
  else
    return 1, 2
  end
end

然后我想构建另一个函数,它同时调用 ab 并返回 a 的所有结果,然后是b。我想写这样的东西:

function c(num)
  return a(num), b(num)
end

但它只返回 a 的第一个结果,然后是 b 的所有结果。我该怎么做?

最佳答案

只能返回表达式列表中最后一个函数的所有结果;其他的将被截断为一个结果。

因此,这

function f1()
    return 1
end

function f2()
    return 2, 3
end

print(f1(), f2())

按预期打印 1 2 3,但是这

print(f2(), f1())

打印 2 1,因为 f2() 被截断为一个结果。

作为解决方法,如果您提前知道结果的数量,您可以这样做

local a, b = f1()
local c, d = f2()
return a, b, c, d

或者对于任意数量的结果,你可以这样做

local t1 = {f1()}
local t2 = {f2()}
-- Append t2 to t1
return unpack(t1)

关于function - 合并两个可变函数结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21032870/

相关文章:

c++ - 优化C++中的函数指针和虚函数

c 函数参数求值顺序

objective-c - 变量参数列表 - 内存管理错误

c - 使用 varargs 在我的 printf 包装器中没有返回错误

c++ - 无法获取 Lua 函数来引用 'self'

java - Java 编译器如何为具有多个边界的参数化类型选择运行时类型?

javascript - 什么是JavaScript中的自调用函数?

perl - 如何使用哈希在 Perl 中创建回调函数(调度表)?

lua - Lua中的路径: Unable to run script in Windows for Lua that requires 'wx'

c++ - 将lua脚本编译成dll?