Scala匹配语句错误

Scala匹配语句错误,scala,match,Scala,Match,我编写了以下简单函数来演示与if条件的匹配。 它适用于正数,例如偶数奇数(5),偶数奇数(6)也适用。但是如果我打电话给evenOdd(-5),我会得到匹配错误 在我添加变量模式case之后,它就消失了_ 为什么会这样 def evenOdd(num: Int):Unit = { num match { case n if (n % 2 == 0) => println("even") case n if (n % 2 == 1) => pri

我编写了以下简单函数来演示与if条件的匹配。 它适用于正数,例如偶数奇数(5),偶数奇数(6)也适用。但是如果我打电话给evenOdd(-5),我会得到匹配错误 在我添加变量模式case之后,它就消失了_

为什么会这样

def evenOdd(num: Int):Unit = {
    num match {
        case n if (n % 2 == 0) => println("even")
        case n if (n % 2 == 1) => println("odd")
    }
}
scala.MatchError:-5(属于java.lang.Integer类)
在Main$$anon$1.evenOdd(Recursion.scala:17)
在Main$$anon$1。(Recursion.scala:24)
在Main$.Main(Recursion.scala:1)
Main.Main(Recursion.scala)
在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处
因为-5%2=-1

因此存在匹配错误,因为未处理此情况

你必须加上(正如你所说的)


或者用
Math.abs(num)
scala.MatchError: -5 (of class java.lang.Integer)
at Main$$anon$1.evenOdd(Recursion.scala:17)
at Main$$anon$1.<init>(Recursion.scala:24)
at Main$.main(Recursion.scala:1)
at Main.main(Recursion.scala)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
case _ => println("not treated")