【发布时间】:2017-06-18 09:28:56
【问题描述】:
在 Scala 中,throw 是一个具有结果类型的表达式。
从技术上讲,异常抛出的类型为
Nothing。您可以将 throw 用作表达式,即使它实际上永远不会计算出任何值。这一点技术体操听起来可能很奇怪,但在像前面的例子这样的情况下经常有用。 if 的一个分支计算一个值,而另一个抛出异常并计算Nothing。整个 if 表达式的类型就是计算某些东西的那个分支的类型。
例子是:
val half =
if (n % 2 == 0)
n / 2
else
throw new RuntimeException("n must be even")
然后我去了 Scala 并尝试:
scala> val n = 1
n: Int = 1
scala> val half = if (n % 2 == 0) n / 2 else throw new RuntimeException("n must be even")
java.lang.RuntimeException: n must be even
... 29 elided
scala> half
<console>:12: error: not found: value half
half
^
表示找不到half。但是,根据这本书,我认为它应该说它是已定义的,并且它的类型为Nothing。
这里有什么问题?
【问题讨论】: