可変個の返り値をテーブルにつっこむ

luaでは、可変個の引数は...でさばけるのだが、
反対に可変個の返り値をさばくよい方法はなさげだった。
とりあえずあみ出したのでメモ。

状況

function hoge()
  -- なんかやっている
  -- 返り値が何個帰ってくるか不定
  return a, b, c
end

-- 先頭をfirstに、残りをテーブルに代入したい
local first, nokori_zenbu=hoge()

こうする

-- 入れ物を宣言
local first, nokori_zenbu

-- 代入用クロージャ
local pack_func=function(_first, ...)
  first=_first
  nokori_zenbu={...}
end
-- 代入実行
pack_func(hoge())

もっとスマートなやり方はないのかなー。


ましな方法を見つけた。

local zenbu={hoge()}
-- ばらすなら
local first=table.remove(zenbu, 1)

よくできた文法だ・・・