Scala:无法捕获在闭包内抛出的异常

Dmi*_*riy 8 closures scala exception

免责声明:斯卡拉的绝对新手:(

我有以下定义:

def tryAndReport(body: Unit) : Unit = {
  try {
    body
  } catch {
    case e: MySpecificException => doSomethingUseful
  }
}
Run Code Online (Sandbox Code Playgroud)

我称之为:

tryAndReport{
  someCodeThatThrowsMySpecificException()
}
Run Code Online (Sandbox Code Playgroud)

虽然对someCodeThatThrowsMySpecificException的调用发生得很好,但是在tryAndReport中没有捕获异常.

为什么?

谢谢!

Jac*_*vis 12

尝试将身体从更改Unit=> Unit.它现在定义的方式,它考虑body了要评估的代码块Unit.使用call-by-name,它将try按照定义执行,并且应该被捕获.


Ran*_*ulz 6

body在你的tryAndReport方法是不是倒闭或块,它的(类型的值Unit).

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

def tryAndReport(block: () => Unit): Unit = {
  try { block() }
  catch { case e: MSE => dSU }
}
Run Code Online (Sandbox Code Playgroud)