为什么拦截命令不适用于scala 2.11.7

时间:2015-08-27 15:27:05

标签: scala

我正在使用来自scala Exercises的资源进行一些scala练习,我发现intecept命令无效。

MacBook-Pro-Retina-de-Alonso:~ aironman$ scala
Welcome to Scala version 2.11.7 (Java HotSpot(TM) 64-Bit Server VM, Java 1.7.0_51).
Type in expressions to have them evaluated.
Type :help for more information.

scala> val myMap = Map("OH" -> "Ohio", "WI" -> "Wisconsin", "IA" -> "Iowa")
myMap: scala.collection.immutable.Map[String,String] = Map(OH -> Ohio, WI -> Wisconsin, IA -> Iowa)

scala> var blewWithException = true
blewWithException: Boolean = true

scala> intercept[NoSuchElementException] {
 |   myMap("MI")
 |   blewWithException = false
 | }
 <console>:13: error: not found: value intercept
   intercept[NoSuchElementException] {
   ^

 scala>

我的借口如果这个问题已经解决了,但系统没有找到我的解决方案。

2 个答案:

答案 0 :(得分:4)

intercept方法是测试库的一部分,您必须下载ScalaTest jar并扩展Assertions特征才能使用它。

答案 1 :(得分:2)

使用try-catch语句,这是捕获异常的本机正确方法:

try {
    myMap("MI")
} catch { (e: NoSuchElementException) =>  
    // do whatever
}

或者完全避免例外。地图有.getOrElse方法,用于指定当密钥不存在时要返回的内容。

myMap.getOrElse("MI", "No state")

或者匹配结果

myMap.get("MI") match {
   case Some(result) => result
   case _ => // do whatever
}