我有兴趣抓取函数的任何返回格式。例如
type()
我正在构建一个用代理函数覆盖函数的分析器,但我需要知道返回的数据,然后检查它的s ListView selected item to 2nd Form
并相应地访问`但是从代码可以看出我无法使用一种方法访问所有3种情况。有没有?
答案 0 :(得分:8)
如果已知最大回报数,请使用
之类的内容v1,v2,v3 = foo()
但您无法判断foo
是否返回了两个值或三个值,最后一个值为零。
强大的解决方案是收集表格中的所有回报:
v = table.pack(foo())
然后v.n
包含返回值的数量,包括所有nils。
答案 1 :(得分:4)
这是一个适用于任何Lua版本5.1 +的版本。
local function WrapAndInspect(Inspector, FunctionToCall)
local function Inspect(...)
Inspector(...)
return ...
end
local function Wrapper(...)
return Inspect(FunctionToCall(...))
end
return Wrapper
end
WrapAndInspect
所做的是生成一个函数,该函数将调用给定函数,然后将其返回值传递给您提供的第二个函数。该功能可以执行您认为必要的任何处理。但是框架将确保原始函数的返回值按原样传递。
这是一个做类似事情的变体,但它不是包装FunctionToCall
,而是返回一个接受要调用的函数的函数(及其参数):
local function CallAndInspect(Inspector)
local function Inspect(...)
Inspector(...)
return ...
end
local function Caller(FunctionToCall, ...)
return Inspect(FunctionToCall(...))
end
return Caller
end
您可以在要检查的任何特定功能上使用此功能。
答案 2 :(得分:3)
以下是无法访问table.pack
的人的解决方法。
对我来说这似乎很简单,它应该适用于lua 5.1及以上 - 甚至可能更早的lua版本。
table_pack
应该像table.pack
function table_pack(...)
return {n=select("#", ...), ...}
end
function foo()
return 1, 2, 3
end
local v = table_pack(foo())
print(v.n)