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

时间:2010-04-17 03:01:46

标签: exception scala closures

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

我有以下定义:

def tryAndReport(body: Unit) : Unit = {
  try {
    body
  } catch {
    case e: MySpecificException => doSomethingUseful
  }
}

我称之为:

tryAndReport{
  someCodeThatThrowsMySpecificException()
}

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

为什么?

谢谢!

2 个答案:

答案 0 :(得分:12)

尝试将正文从Unit更改为=> Unit。它现在定义的方式,它考虑body一个代码块来评估Unit。使用call-by-name,它将按照定义的try执行,应该被捕获。

答案 1 :(得分:6)

body方法中的tryAndReport不是闭包或块,而是值(类型Unit)。

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

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