Scala:无法捕获闭包内引发的异常
免责声明:Scala 中的绝对新手:(
我有以下定义:
def tryAndReport(body: Unit) : Unit = {
try {
body
} catch {
case e: MySpecificException => doSomethingUseful
}
}
我这样称呼它:
tryAndReport{
someCodeThatThrowsMySpecificException()
}
虽然对 someCodeThatThrowsMySpecificException 的调用发生得很好,但 tryAndReport 中没有捕获异常。
为什么?
谢谢!
Disclaimer: absolute novice in Scala :(
I have the following defined:
def tryAndReport(body: Unit) : Unit = {
try {
body
} catch {
case e: MySpecificException => doSomethingUseful
}
}
I call it like this:
tryAndReport{
someCodeThatThrowsMySpecificException()
}
While the call to someCodeThatThrowsMySpecificException happens just fine, the exception is not being caught in tryAndReport.
Why?
Thank you!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
尝试将正文从
Unit
更改为=>;单位
。按照现在的定义方式,它认为body
是一个要计算为Unit
的代码块。使用按名称调用,它将在定义的try
中执行,并且应该被捕获。Try changing body from
Unit
to=> Unit
. The way its defined now, it considersbody
a block of code to evaluate toUnit
. Using call-by-name, it will be executed in thetry
as defined and should be caught.tryAndReport
方法中的body
不是闭包或块,而是一个值(Unit
类型)。我不建议使用按名称参数,而是使用显式函数。
The
body
in yourtryAndReport
method is not a closure or block, it's a value (of typeUnit
).I don't recommend using a by-name argument, but rather an explicit function.