Exception Scala:Can';t捕获在闭包内引发的异常
免责声明:Scala中的绝对新手:( 我有以下定义: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
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参数后面。