我刚刚开始学习Scala,所以这可能是一个简单的问题。我想使用try-catch块来检查变量是否已声明。
我正在使用try-catch块并在变量不存在的情况下捕获NoSuchElementException
。
try{
print(testVariable)
}
catch{
case e: NoSuchElementException => print("testVariable not found")
}
我的代码显示的错误是testVariable
不存在,而不是引发异常。然后,我也尝试了多个其他异常,但是Scala的try-catch似乎没有捕获任何异常(除以零的异常除外)。
有人可以指导我如何使用Scala的try-catch块吗?
答案 0 :(得分:8)
在Scala中(或者几乎是任何 compiled 编程语言,实际上),在编译时检查变量是否已声明是编译器的工作。如果您尝试使用尚未声明的变量,则编译器将给出错误消息,并且您的代码将无法运行。
异常是在运行时表示问题的一种方式。
“编译时间”和“运行时间”之间没有重叠,因此您尝试执行的操作没有意义。 不是“变量不存在”的例外,这就是为什么您无法捕获它的原因。
相比之下,请看以下示例:
val map = Map('a' -> 1, 'b' -> 2)
map('c') // will throw NoSuchElementException because there is no 'c' in the map
在这种情况下,map.apply('c')
(apply
的语法糖使您可以map('c')
抛出异常,因为这是Map的apply方法的实现方式。请参见the definition of Map#apply
,该调用Map#default(如果键不在地图中; Map#default
抛出NoSuchElementException。
您可以通过try / catch捕获该异常,例如
try {
map('c')
} catch {
case e: NoSuchElementException =>
println("got it!")
}