我回來到Lua的C很長一段時間之後++只和我目前正在重新換我周圍的一些更復雜的東西頭。的Lua:回報任意數量的值
想象一個小工具功能,看起來像這樣,多次調用一個函數的參數任意數量:
-- helper to call a function multiple times at once
function smartCall(func, ...)
-- the variadic arguments
local args = {...}
-- the table to save the return values
local ret = {}
-- iterate over the arguments
for i,v in ipairs(args) do
-- if it is a table, we unpack the table
if type(v) == "table" then
ret[i] = func(unpack(v))
else
-- else we call the function directly
ret[i] = func(v)
end
end
-- return the individual return values
return unpack(ret)
end
然後我就可以做這樣的事情:
local a,b,c = smartCall(math.abs, -1, 2.0, -3.0)
local d,e,f = smartCall(math.min, {1.0, 0.3}, {-1.0, 2.3}, {0.5, 0.7})
這有效,但我想知道是否有更方便的方式,因爲我的版本涉及到大量的解壓和臨時表。
TY
小警告:您的代碼假定'func''返回一個值;如果它返回更多,那些被忽略。你確定這就是你想要的嗎? – kikito 2012-01-04 22:58:16