P172〜173の高階関数の
クロージャ化が個人的に非常に理解しづらかったのでここに記します。
2つのコードから成り立っています。
private def filesMatching(matcher: (String) => Boolean) =
for(file <- filesHere; if matcher(file.getName))
yield file
こちらはコード2のヘルパー関数(関数を助けるために括りだした処理)です。
引数は「Stringを引数とし、Boolean型を返す関数値」です。
実際にコードから呼び出すのはコード2の関数になります。
def filesEnding(query: String) = filesMatching(_.endsWith(query))
文中ではこれがクロージャであるとは記されていないのですが(自明なので)、
こちらがクロージャを使用した関数となります。
コード2は以下のように使います。
val query = "txt";
val txtList = filesEnding(query)
for (value <- txtList)
println(value)
最後が「txt」で終わっているファイルが表示されることが確認できると思います。
二行目の引数に文字列をそのまま入れてもかまいませんがあえて変数を書いてみました。
実行には以下の記述も必要なので忘れないでください。
private def filesHere = (new java.io.File(".")).listFiles
"."の箇所を、各環境にあわせると良いと思います。
最終更新:2013年09月23日 23:49