scala错误处理-如果scala代码的一部分失败,我想作为程序的一部分执行一个function()

kwvwclae  于 2021-05-26  发布在  Spark
关注(0)|答案(1)|浏览(336)

我是scala编码的新手,如果scala代码的一部分失败了,我需要执行一个函数。我尝试过使用try/catch,但是在catch{}块中我无法调用func1()函数。任何建议都会有帮助。谢谢。

object obproc {
 def main(args: Array[String]): Unit = {
  code1

  code2

  code3

  def func1(a:String) {
 //some functionality
 }
 // if code2 fails I have to execute the function as func1("code failed")
}

}

jfewjypa

jfewjypa1#

如果您只是想捕获 code1 打电话给我 func1() ,可以简单到:

import scala.util.Try
Try(code1).getOrElse(func1("code 1 failed"))

但这是一个粗糙的实现。如果 func1() 失败?
正如其他人在评论中所说的,值得考虑的是如何在代码库中表达和封装故障。以及它们是如何组成的。
如果我们使用 Try 为了概括我们的失败,我们可以这样写:

def code1: Try[Unit] = ???
def func1(a: String): Try[Unit] =  ???
val composedApplication: Try[Unit] = code1.orElse(func1("failed"))

然后在应用程序的最顶端运行它:

composedApplication.fold(err => println("failure" + err), _ => println("success"))

相关问题