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