9-1 减少重复代码(高阶函数)
方法filesMatching接收一个函数作为参数,这种高阶函数,可以简化很多代码。
_.endsWith(query)中有一个自由变量query,形成了闭包。
object Test9$1 { private def filesHere = new File(".").listFiles() def filesMatching(matcher: String => Boolean) = { for (file <- filesHere if matcher(file.getName)) yield file } //按以结尾进行搜索 def filesEnding(query: String) = { // _.endsWith(_) 表示一个(String, String) => Boolean 函数的函数体 filesMatching(_.endsWith(query)) } //按是否包含进行搜索 def filesContaining(query: String) = { filesMatching(_.contains(query)) } //按正则表达式搜索 def filesRegex(query: String) = { filesMatching(_.matches(query)) } }