Exception Scala:Can';t捕获在闭包内引发的异常

Exception Scala:Can';t捕获在闭包内引发的异常,exception,scala,closures,Exception,Scala,Closures,免责声明:Scala中的绝对新手:( 我有以下定义: def tryAndReport(body: Unit) : Unit = { try { body } catch { case e: MySpecificException => doSomethingUseful } } 我这样称呼它: tryAndReport{ someCodeThatThrowsMySpecificException() } 虽然通过MySpecificationExcep

免责声明:Scala中的绝对新手:(

我有以下定义:

def tryAndReport(body: Unit) : Unit = {
  try {
    body
  } catch {
    case e: MySpecificException => doSomethingUseful
  }
}
我这样称呼它:

tryAndReport{
  someCodeThatThrowsMySpecificException()
}
虽然通过MySpecificationException调用某个代码发生得很好,但在tryAndReport中不会捕获异常

为什么?


谢谢!

尝试将body从
Unit
更改为
=>Unit
。按照现在定义的方式,它将
body
视为一个代码块以计算为
Unit
。使用按名称调用,它将在定义的
Try
中执行,并且应该被捕获。

tryAndReport
中的
body
>方法不是闭包或块,而是一个值(类型为
Unit

我不建议使用by-name参数,而是建议使用显式函数

def tryAndReport(block: () => Unit): Unit = {
  try { block() }
  catch { case e: MSE => dSU }
}

我不建议使用by-name参数,而是一个显式函数。--为什么?我支持,你不应该在没有理由的情况下给出这样的建议。因为我相信你的意思。你希望函数在
tryAndReport
的主体内进行计算,而不应该隐藏在by-name参数后面。