Menu
Coddy logo textTech

可変長引数関数

CoddyのLuaジャーニー「Luau入門」セクションの一部。レッスン 27/73。

Lua の ...(varargs)を使って、任意の数の引数を受け取る function を作成しました。Luau では varargs に型を付けることができるため、渡されるすべての引数がチェックされます:

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 は、追加されるすべての引数が number でなければならないことを宣言します。つまり、sum(1, "two") は型エラーになります。実行時のツールは、すでに知っているものです:

  • {...} は varargs を配列(ここでは {number})にまとめます
  • select("#", ...) は渡された引数の数を数えます
  • ... は別の function にそのまま渡すことができます。例:math.max(...)

Lua と同様に、...最後の parameter でなければなりません。通常の(型付き)parameter が先に来て、variadic の末尾部分が残りを受け取ります:

function joinWords(separator: string, ...: string): string
    return table.concat({...}, separator)
end

print(joinWords("-", "a", "b", "c"))  -- a-b-c
challenge icon

チャレンジ

簡単

任意の数のnumber引数(...: number)を受け取り、それらの合計をnumberとして返す、sumAllという名前の関数を作成してください。

任意の数のstring引数を受け取り、渡された引数の個数numberとして返す、countValuesという名前の関数を作成してください。select("#", ...)を使用します。

必須のseparator: stringに続いて任意の数のstring引数を受け取り、それらを区切り文字で結合して返す、joinWordsという名前の関数を作成してください({...}に対してtable.concatを使用します)。戻り値の型はstringです。

次の各呼び出しを、それぞれ独自の行に出力してください。

  1. sumAll(5, 10, 15)
  2. sumAll(1, 2, 3, 4, 5)
  3. countValues("a", "b", "c", "d")
  4. joinWords("-", "apple", "banana", "cherry")
  5. joinWords(" | ", "red", "green", "blue")

自分で試してみよう

-- ここにコードを書いてください
-- sumAll(...: number): number       -- {...} をループ
-- countValues(...: string): number  -- select("#", ...)
-- joinWords(separator: string, ...: string): string
-- その後、5つの結果を出力する
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

Luau入門のすべてのレッスン

自分で練習してみよう: Luaオンラインコンパイラ