可変長引数の関数
CoddyのLuaジャーニー「Luau入門」セクションの一部。レッスン 29/80。
Luaの...(可変長引数)を使って、任意の数の引数を受け取る関数を書きました。Luauでは可変長引数に型を指定できるため、渡されるすべての引数がチェックされます。
function sum(...: number): number
local total = 0
for _, n in ipairs({...}) do
total = total + n
end
return total
end
print(sum(1, 2)) -- 3
print(sum(1, 2, 3, 4, 5)) -- 15...: numberは、追加の引数がすべて数値でなければならないことを宣言します。そのため、sum(1, "two")は型エラーになります。実行時に使うツールはおなじみのものです。
{...}は可変長引数を配列(ここでは{number})にまとめます。select("#", ...)は渡された引数の数を数えます。...は、たとえばmath.max(...)のように、そのまま別の関数に渡せます。
Luaと同じく、...は最後のパラメーターでなければなりません。通常の(型付き)パラメーターを先に置き、可変長部分で残りの引数を受け取ります。
function joinWords(separator: string, ...: string): string
return table.concat({...}, separator)
end
print(joinWords("-", "a", "b", "c")) -- a-b-cチャレンジ
簡単任意の数の引数を受け取る関数を2つ書きましょう。
local function sumAll(...: number): numberを記述して、{...}をipairsで合計します。local function joinWords(separator: string, ...: string): stringを記述して、table.concat({...}, separator)を返します。sumAll(5, 10, 15)とjoinWords("-", "apple", "banana", "cherry")を出力します。
Run Codeを押すと、出力に30とapple-banana-cherryが表示されます。
自分で試してみよう
-- 1) sumAll(...: number): number
-- 2) joinWords(separator: string, ...: string): string
-- 3) 2つの結果を出力する
Luau入門のすべてのレッスン
自分で練習してみよう: Luauオンラインコンパイラ