scala返回类型函数不匹配

时间:2017-08-22 17:27:37

标签: scala io

我只是将我的脚浸入scala中,并坚持为什么这个方法无法编译。我希望标题找到给定目录路径和文本文件名的文件,并返回文本文件的前n行。我得到的编译错误是:

  

类型不匹配;

     

发现:单位

     

必需:字符串

import java.io._
def header(fileName:String, directory:String =".",n:Int=5): String = {
  val files = new File(directory).listFiles
  for (file <- files if file.getName == fileName)  {

    val source = scala.io.Source.fromFile(file)

    try{
      val string=source.getLines.toList.slice(0,n).mkString
      string
    }
    catch {
      case e: Exception => "not good. something went wrong"
    }
    finally{
      source.close
    }
  }
}

1 个答案:

答案 0 :(得分:0)

您的for循环未按预期返回响应。您可以在那里使用可变变量并返回变量。 (不推荐)

    {
      ...

      var response = ""
      for (file <- files if file.getName == fileName)  {
            try {
              response = source.getLines.toList.slice(0,n).mkString
            }
            ...
      } // end of for
      response
    }

或者使用.filter后跟.map,它会为您提供Array[String]

def header(fileName:String, directory:String =".",n:Int=5): String = {

  val files = new File(directory).listFiles

  val response= files.filter(_.getName.equals(fileName)).map {  file =>
    val source = scala.io.Source.fromFile(file)
    val sliced = source.getLines.toList.slice(0,n).mkString
    source.close()
    sliced
  }

  response(0)
}
相关问题