免责声明:Scala的绝对新手:(
我有以下定义:
def tryAndReport(body: Unit) : Unit = {
try {
body
} catch {
case e: MySpecificException => doSomethingUseful
}
}
我称之为:
tryAndReport{
someCodeThatThrowsMySpecificException()
}
虽然对someCodeThatThrowsMySpecificException的调用发生得很好,但是在tryAndReport中没有捕获异常。
为什么?
谢谢!
答案 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 }
}