2
私はScalaを学ぼうとしていますが、私はこの例を理解できません。 OderskyらによるProgramming in Scala 9.1を参照してください。 al。は、著者は、彼らはあなたが他の人によって書かれたクライアントコードが使用するFileMatcherオブジェクトを作成しているシナリオを与えるこのコードScalaのクローズ
object FileMatcher {
private def filesHere = (new java.io.File(".")).listFiles
private def filesMatching(matcher: String => Boolean) =
for (file <- filesHere; if matcher(file.getName))
yield file
def filesEnding(query: String) =
filesMatching(_.endsWith(query))
def filesContaining(query: String) =
filesMatching(_.contains(query))
def filesRegex(query: String) =
filesMatching(_.matches(query))
}
を生成し、このコードは、リファクタリングのカップルの結果です。
私はクエリが自由変数だと理解していますが、呼び出し元がどのようにそれを利用するのか分かりません。 Scalaは正しく理解していればレキシカルスコープであり、これはオブジェクト定義であるため、クライアントは字句を囲むスコープでクエリを定義することはできません。
クライアントがファイルエンディングを呼び出して、 ".txt"で終わるすべてのファイルを見つける方法の例を教えてください。
FileMatcher.filesEnding( "txt") – Apocalisp
この方法では、クロージャを使用して直接呼び出すことはできません。ただし、呼び出すメソッドはクロージャを使用します。_.endsWith(query) – thoredge
クエリは、完全に標準的なメソッドパラメータです。 – soc