scala函数的返回类型不匹配

scala函数的返回类型不匹配,scala,io,Scala,Io,我只是把脚伸进了scala,我一直在想为什么这个方法不能编译。我希望header找到给定目录路径和文本文件名的文件,并返回文本文件的前n行。我得到的编译错误是: 类型失配 发现:单位 必需:字符串 导入java.io_ def标题(文件名:String,目录:String=“.”,n:Int=5):String={ val files=新文件(目录).listFiles 文件“不好,出了点问题” } 最后{ source.close } } } for循环未按预期返回响应。您可以在此处使用可变变

我只是把脚伸进了scala,我一直在想为什么这个方法不能编译。我希望header找到给定目录路径和文本文件名的文件,并返回文本文件的前n行。我得到的编译错误是:

类型失配

发现:单位

必需:字符串

导入java.io_
def标题(文件名:String,目录:String=“.”,n:Int=5):String={
val files=新文件(目录).listFiles
文件“不好,出了点问题”
}
最后{
source.close
}
}
}

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


在学习scala的过程中,我试图在我的代码中加入越来越多的函数式编程模式,因此第二个filter/map方法非常灵活。当然,不要使用第一个答案,因为在非函数式语言中会这样做。但是,在最后关闭每个源代码怎么样?我尝试添加一个源代码。接近m中的函数文本ap方法,但它又给了我一个类型错误。我更新了答案,要做到这一点,您必须将结果存储在某个变量中,并在关闭源代码后返回
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
    }
  }
}
    {
      ...

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