我只是将我的脚浸入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
}
}
}
答案 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)
}