【发布时间】:2019-01-17 13:43:14
【问题描述】:
这个例子来自https://www.scala-lang.org/api/current/scala/util/control/ControlThrowable.html:
import scala.util.control.ControlThrowable
try {
// Body might throw arbitrarily
} catch {
case c: ControlThrowable => throw c // propagate
case t: Exception => log(t) // log and suppress
}
我理解为什么不能捕获Throwable,但在本例中,我们可以毫无问题地删除case c: ControlThrowable => throw c // propagate,因为下一个案例捕获Exception,因此无论如何都不会捕获ControlThrowables。我在这里遗漏了什么吗?
【问题讨论】:
-
在 Scala 中捕获可投掷物被认为是不好的做法。
ControlThrowable用于在程序员拥有用于流控制的Throwable的极少数情况下使用。见here -
就像我说的,我理解捕获
Throwable是不好的做法。这在我发送的链接中也有解释。但删除该行并不意味着所有Throwables 都会被捕获——Exception是Throwable的子类型。 -
@jrook
ControlThrowable被 Scala 内部使用。程序员几乎从不使用它。
标签: scala