Scala 2.9的用例是什么?catch泛化?
发布时间:2020-12-16 09:39:23 所属栏目:安全 来源:网络整理
导读:我已经阅读并尝试了Scala 2.9 try … catch功能,它让我想到了可能性。除了保存几行代码之外,我实际使用什么? Scala 2.9 Final Release Notes 解决方法 用例是在整个应用程序中具有通用错误处理。假设您想通过向管理员发送电子邮件来处理应用程序中的所有F
我已经阅读并尝试了Scala 2.9 try … catch功能,它让我想到了可能性。除了保存几行代码之外,我实际使用什么?
Scala 2.9 Final Release Notes 解决方法
用例是在整个应用程序中具有通用错误处理。假设您想通过向管理员发送电子邮件来处理应用程序中的所有FileNotFoundExceptions。以前,你必须这样做:
// Globally val fileNotFound: PartialFunction[Throwable,Unit] = { case e: FileNotFoundException => // Create report and send the e-mail } // On each try-catch-block try { // Open file } catch { case fnf: FileNotFoundException => fileNotFound(fnf) } 现在你只要做: try { // Open file } catch fileNotFound 这也有一个很好的优势,您可以使用部分函数上的orElse方法链接几个这样的异常处理程序: val fileErrors = fileNotFound orElse endOfFile orElse invalidFormat 然后只需使用你需要文件异常处理的地方。例如,这种错误处理程序可以基于应用程序的配置文件动态组合。这比所有地方的模式匹配要麻烦得多,并调用正确的处理程序。 一个有用的东西可以在部分功能之上进行调整,它是ANDAlso运算符,它作为两个部分函数的排序运算符。在完成通用错误处理之后,当您想对特定的try-catch块执行特定的错误处理时,这将非常有用。 implicit def pf2ops(pf: PartialFunction[Throwable,Unit]) = new { def andAlso(localpf: PartialFunction[Throwable,Unit]) = new PartialFunction[Throwable,Unit] { def apply(t: Throwable) = { if (pf.isDefinedAt(t)) pf(t) localpf(t) } def isDefinedAt(t: Throwable) = pf.isDefinedAt(t) || localpf.isDefinedAt(t) } } 然后你可以这样做: scala> try { | throw new java.io.FileNotFoundException | } catch fnf andAlso { | case e: Exception => println("I don't know,but something is specific to this particular block.") | } I don't know,but something is specific to this particular block. 我想你可以进一步发挥其准确的语义和意义(和名称)和。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |