Lua文法小贴士(十三)可変パラメータとunpack


Luaは可変パラメータをサポートし、...に表示されます.
例:
local function func(...)
    print(...)
end

もちろん前に固定パラメータを追加することもできます
local function funca(a,...)
    --TODO:
end

カッコで...パッケージ化してtableにします.たとえば、次のようにします.
local function func(...)
    print(...)
    local tbl = {...}
    print(#tbl)
end

呼び出し:
func(1,2,3,4)

またLuaではunpack関数を用いて配列形式のtableを取り外すことができる.
例:
local tbl = {2,4,6,8}
local a,b,c,d = unpack(tbl)

この関数には3つのパラメータがあり、1つ目のパラメータは分解するtableで、2つ目のパラメータは開始要素の下付き文字で、デフォルトは1で、3つ目のパラメータは終了要素の下付き文字で、デフォルトはtableの長さです.
取り外した要素を上のfuncのパラメータとして使用できます.
func(unpack(tbl))

最後に、Luaの関数は、次のような複数の戻り値を返すことができることを知っています.
local function funcpp(a)
    return a, a + 1, a + 2
end

unpackは、複数の戻り値を提供するためにテールコールとして使用することができる.
また、戻り値はカッコでパッケージ化することもできます.たとえば、次のようになります.
print(#{funcpp(4)})