可変長引数関数
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チャレンジ
簡単任意の数のnumber引数(...: number)を受け取り、それらの合計をnumberとして返す、sumAllという名前の関数を作成してください。
任意の数のstring引数を受け取り、渡された引数の個数をnumberとして返す、countValuesという名前の関数を作成してください。select("#", ...)を使用します。
必須のseparator: stringに続いて任意の数のstring引数を受け取り、それらを区切り文字で結合して返す、joinWordsという名前の関数を作成してください({...}に対してtable.concatを使用します)。戻り値の型はstringです。
次の各呼び出しを、それぞれ独自の行に出力してください。
sumAll(5, 10, 15)sumAll(1, 2, 3, 4, 5)countValues("a", "b", "c", "d")joinWords("-", "apple", "banana", "cherry")joinWords(" | ", "red", "green", "blue")
自分で試してみよう
-- ここにコードを書いてください
-- sumAll(...: number): number -- {...} をループ
-- countValues(...: string): number -- select("#", ...)
-- joinWords(separator: string, ...: string): string
-- その後、5つの結果を出力する
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
Luau入門のすべてのレッスン
7プロジェクト:Typed Task Manager
プロジェクト:タスクの型定義タスクを追加する関数自分で練習してみよう: Luaオンラインコンパイラ