当只需要一个"案例"时,如何避免"匹配并非详尽无遗"?

0 scala pattern-matching

可能重复:
如何在Scala中禁止"匹配并非详尽!"警告

object Euler extends App {
val Max = 4000000

def p2: Int = p2(0 :: 1 :: Nil).filter(_ % 2 == 0).sum

def p2(list: List[Int]): List[Int] = {
    list match {
        case n1 :: n2 :: tail => if (Max < n1) n2 :: tail
                                 else p2(n1 + n2 :: list)
        // case _ => 0 :: 0 :: Nil // "match is not exhaustive"
    }
}   
println(p2)
}
Run Code Online (Sandbox Code Playgroud)

有人可能会给我一个例子,说明如何在没有第二种情况下使我的代码片段可编辑吗?

Ale*_*nov 11

你可以使用@unchecked:

(list: @unchecked) match { ... }
Run Code Online (Sandbox Code Playgroud)


900*_*000 6

如果只需要一个案例,则查看其他案例将表示错误.我补充case _说会引发错误.例如,如果传递的列表长度小于2个元素,则会触发.

或者,您可以手动剪切列表的头部两次,但它不会简洁.

  • 如果没有案例匹配,Scala已经引发错误. (3认同)
  • @ 9000你的代码也会在运行时轰炸,如果我的想法是正确的(在*other*分支中抛出错误),或者不会只运行例如你只放置`case _`,没有箭头,或者吞下无效情况(案例_ =>).我确实相信通常第一个或MatchException应该是首选. (2认同)