我有一个 post-hook 函数,它自己接收一些数据,引用另一个函数和...
. 在引用的函数返回后,此函数会进行一些后处理。为简单起见,我们只记下时间:
function passthrough(tag, func, ...)
metric1[tag] = os.time()
func(...)
metric2[tag] = os.time()
end
由于我需要后处理,我不能立即return func(...)
,我不知道会有多少退货。完成后处理后,如何通过这些退货?
到目前为止,我只能考虑打包调用,local results = { func(...) }
然后使用return unpack(results)
或制作一个后处理器工厂,该工厂将生成后处理闭包,并将所有必要的数据作为上值:
local function generate_postprocessor(tag)
return function(...)
metric2[tag] = os.time()
return ...
end
end
function passthrough2(tag, func, ...)
metric1[tag] = os.time()
return generate_postprocessor(tag)(func(...))
end
然而,考虑到大量的迭代和应用程序的实时性,这两种方法都会引入一些不希望的开销。有没有更简单的?