【发布时间】:2018-03-09 12:01:20
【问题描述】:
我试图了解 Try 在 scala 中的工作方式(不是 try/catch),而是 Try。举个例子,这里我想检查文件是否存在,如果存在,我会在后面的代码中使用文件中的数据,但是它不起作用:
val texte = Try(Source.fromFile(chemin_texte).getLines().filter(_!="").foldLeft(""){_+_})
texte match {
case Success(x) => x
case Failure(e) => println("An error occured with the text file"); println("Error: " + e.getMessage)
}
/*phrases du texte*/
val phrases_txt = split_phrases(texte).map(phrase => phrase)
val phrases_txt 如果文件存在,我希望使用texte 的输出,否则程序应该在Failure(e) 停止。
我得到的错误是类型不匹配;找到:scala.util.Try[String] required: String。
有什么帮助吗?谢谢。
【问题讨论】:
-
您需要将匹配结果分配给一个变量。
texte是Try[String]。成功时,匹配的结果是您要传递给split_phrases的String。 -
是的,我明白你的意思,但是如果我这样做
val temp = texte match ...,那么我不能调用 split_phrases(temp) 因为它说它返回 Any 而不是 String - 我同意在成功的情况是一个字符串,但我们不考虑失败 -
哦,是的...您可能想
mapTry:texte.map(x => split_phrases(x)...)然后在最后而不是中间检查是否成功。 -
在这种情况下,我最好的建议是为代码中的每个 var/val 添加显式类型。如果您使用的是 IDE,那就更容易了。你会看到一些 val 这不是你想要的类型
标签: scala file io functional-programming try-catch