Lua - 我怎么能获得任何回报?

luk*_*nis 5 lua

我有兴趣抓取函数的任何返回格式.例如

function foo()
  return 1
end

local result = foo() -- foo is numeric 1

function foo()
  return {1,2,3}
end
local result1, result2, result3 = foo()
local result = foo() -- this is bad as result is `1` but `2` and `3` are lost

function foo()
  return 1, 2, 3
end
local result = foo() -- foo is a table with all the numbers, that's ok
Run Code Online (Sandbox Code Playgroud)

我正在构建一个将使用代理函数覆盖函数的分析器,但我需要知道返回的数据,然后检查type()它并相应地访问`但是从代码可以看出我无法使用一种方法访问所有3种情况.有没有 ?

lhf*_*lhf 8

如果已知最大返回数,请使用类似的内容

v1,v2,v3 = foo()
Run Code Online (Sandbox Code Playgroud)

但是你无法判断是foo返回两个值还是三个,最后一个是nil.

强大的解决方案是收集表中的所有回报:

v = table.pack(foo())
Run Code Online (Sandbox Code Playgroud)

然后v.n包含返回值的数量,包括所有nils.

  • 请注意,table.pack需要Lua 5.2+ (4认同)
  • 自Lua 5.2于4年前发布以来,这应该没问题,除非你使用LuaJIT,它只支持Lua 5.1. (4认同)
  • 是的,但是LuaJIT很受欢迎,所以最好事先知道. (2认同)
  • 如果你没有访问`table.pack`,你可以尝试使用`v = {foo()}` (2认同)
  • 如果使用`-DLUAJIT_ENABLE_LUA52COMPAT构建,LuaJIT支持`table.pack()` (2认同)