Я пытаюсь выучить Scala и не могу понять этот пример. В листинге 9.1 Программирование в Scala, Odersky et. al., авторы выпускают этот код
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))
}
Они дают сценарий, в котором вы пишете объект FileMatcher для использования клиентским кодом, написанным другими, и этот код является результатом нескольких рефакторингов.
Я понимаю, что запрос является свободной переменной, но я не понимаю, как вызывающий объект должен использовать его. Поскольку Scala, если я правильно понимаю, имеет лексическую область, и это определение объекта, клиент не может определить запрос в лексически заключенной области, так откуда же запрос?
Можете ли вы привести пример того, как клиент должен вызывать filesEnding, чтобы найти все файлы, оканчивающиеся на ".txt", например?