無名関数
CoddyのLuaジャーニー「ロジックと制御フロー」セクションの一部。レッスン 13/54。
関数を変数に格納したり、受け渡したりできることを理解したところで、関数をさらに簡潔に記述する方法があります。関数に常に名前を付ける代わりに、必要な場所で直接作成できます。これらは匿名関数と呼ばれます。
匿名関数とは、単に名前のない関数です。functionキーワードの直後にパラメーターと本体を続けて記述して定義します。
function(a, b)
return a + b
endこれにより、すぐに使用できる function の値が作成されます。無名関数は、他の関数に引数として関数を渡す場合に特に便利です。先ほどのカスタムソートの例を覚えていますか?無名関数を使うと、次のようになります。
local players = {
{name = "Alice", score = 150},
{name = "Bob", score = 200},
{name = "Charlie", score = 175}
}
table.sort(players, function(a, b)
return a.score > b.score
end)比較のために別の名前付きfunctionを定義する代わりに、functionはtable.sort()の2番目の引数として直接作成されています。これによりコードがより簡潔になり、ソートのロジックをそれが使用される場所に置いておけます。
チャレンジ
簡単Write filterByThreshold function は numbers と threshold を受け取り、threshold より大きい数値のみを含む新しい table を返します。
数値をフィルタリングするために、匿名 function のアプローチで table.insert() を使用します。別の名前付き function を定義せず、フィルタリングのロジックをインラインで作成してください。
ロジック:
- 空の result table を作成する
- numbers table を反復処理する
- 各数値について、匿名 function を使用して threshold を超えているか確認する
- チェックが true を返した場合、その数値を result table に追加する
- フィルタリングした result table を返す
パラメーター:
numbers(table): 数値を含むリスト形式の tablethreshold(number): フィルタリングのための最小値(この値は含まない)
戻り値: threshold より大きい数値のみを含む table (table)
自分で試してみよう
function filterByThreshold(numbers, threshold)
-- ここにコードを書いてください
end
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
ロジックと制御フローのすべてのレッスン
自分で練習してみよう: Luaオンラインコンパイラ