Scala编译警告和失败。警告:这会捕获所有Throwables

时间:2017-03-15 20:03:53

标签: scala

这是一个用于检查素数的简单scala代码。 当我在命令提示符下编译时,我收到以下警告。我以为我会少关心警告。但它没有创建.class文件。 有人可以分享这个警告的含义吗?

警告:这会抓住所有Throwables。如果确实如此,请使用case _ : Throwable清除此警告。

object PrimeNumber extends App {

        println("11 is prime number : " + checkPrimeNumber(11))
        println("111 is prime number : " + checkPrimeNumber(111))


    //Method for checking prime numbers between 1 and 100
    def checkPrimeNumber(num: Int) = {
     try {
            if (num < 1 || num > 100)
            throw new IllegalArgumentException("Number should be between 1 and 100")
        else
            isPrimeNumber(num)
        } catch {
            case e: IllegalArgumentException => e.printStackTrace()
            case _ => println("Exception has occurred!")
        }
}

//Non Functional Method for finding prime number
def isPrimeNumber(number: Int): Boolean = {
        var i = 2
        while (i <= number / 2) {
            if (number % i == 0) {
            return false
        }
            i += 1
        }
            true
 }

}

1 个答案:

答案 0 :(得分:4)

在Java中捕获Throwable是危险的,在Scala中捕获更多。 相反,使用这个:

catch { case scala.util.control.NonFatal(e) => // do something }

请参阅http://www.tzavellas.com/techblog/2010/09/20/catching-throwable-in-scala/