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

  

posted @ 2020-11-29 14:26  地中有山  阅读(150)  评论(0编辑  收藏  举报