Я изучаю Scala (в основном из Java). Я пытаюсь обернуть голову вокруг следующего кода:
object Main {
def main(args : Array[String]) {
for (file <- filesEnding(".txt"))
println(file.getName)
}
private val filesHere = (new java.io.File(".")).listFiles
def filesMatching(matcher: String => Boolean) =
for (file <- filesHere; if matcher(file.getName))
yield file
def filesEnding(query: String) = filesMatching(_.endsWith(query))
/* Other matcher functions */
}
В частности, я запутался, когда Scala получает значение для _
в каждой из функций сопоставления. Я вижу, что filesEnding
вызывается с аргументом .txt
. Этот аргумент присваивается query
. filesEnding
затем вызывает filesMatching
с аргументом, согласующимся с функцией String => Boolean
. Наконец, я вижу, что file.getName
- это то, что в конечном итоге заменяет заполнитель _
.
Что я не понимаю, так это то, как Скала знает, как поставить file.getName
вместо _
. У меня возникают проблемы с отслеживанием этого кода в моей голове, и отладчик затмения не очень помогает в этой ситуации. Может кто-нибудь рассказать мне, что происходит в этом коде?