Menu
CoddyTech

可変長引数の関数

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
challenge icon

チャレンジ

簡単

任意の数の引数を受け取る関数を2つ書きましょう。

  1. local function sumAll(...: number): numberを記述して、{...}をipairsで合計します。
  2. local function joinWords(separator: string, ...: string): stringを記述して、table.concat({...}, separator)を返します。
  3. 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オンラインコンパイラ