Lua言語を始めてまだ3日です。
Lua言語は関数を引数にとれるようですね。どうしてこのような機能があるか良く分かりません。
便利な使い方を教えてください。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答1件
0
ベストアンサー
関数の引数に関数を渡すのは高階関数といって、最近のプログラミング言語では結構一般的です。
利用例としてはソート時に独自の比較関数を用意してソートしたりする場合に使えます。
lang
1vals = {"a", "b", "B", "c"} 2 3-- 通常のソート 4table.sort(vals) 5print(table.concat(vals,", ")) -- B, a, b, c 6 7-- 大文字小文字を区別しないソート 8table.sort(vals, 9 function(a,b) 10 return (string.lower(a) < string.lower(b)) 11 end) 12print(table.concat(vals,", ")) -- a, b, B, c
また、自作のユーザー型などの場合は比較関数を渡さないと比較できません。
その他にもテーブルなどのデータの処理に使われます。
次の例ではテーブルに関数を適用して新しいテーブルを作る(マッピング, 写像)処理の関数を作って、それを使っています。
lang
1-- マッピング 2function map(func, array) 3 local new_array = {} 4 for i,v in ipairs(array) do 5 new_array[i] = func(v) 6 end 7 return new_array 8end 9 10-- 値を 2 倍する関数を {1,2,3} に適用 11dest = map(function(x) return 2 * x end, {1,2,3}) 12print(table.concat(dest,", ")) -- 2, 4, 6
高階関数を使ったコレクション(lua ではテーブル)などのデータ処理は関数型言語ではポピュラーな手法です。
これは便利なので C#(LINQ), Java, C++(C++14) など関数型以外の多くの言語で取り入れられていっています。
Lua ではデフォルトでそういった関数は用意されていませんが、高階関数が使えるので一応できるようになっています。
投稿2014/09/04 17:10
総合スコア863
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2014/09/05 00:54