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))
}
}

浙公网安备 33010602011771号