我是 Scala 新手,我遇到了类似的问题,并且对编译器给出的警告感到困惑。如果其他人遇到同样的事情,这就是让我感到困惑以及我的解决方案是什么。
我的编译器给了我一个大致这样的警告(但我用 OP 的代码代替了我的代码):
[warn] path/to/file.scala:123: unreachable code
case x::xs => combinations(List((x._1,x._2 - 1))) ::: combinations(xs)
^
编译器指向您最后一个 case 语句中的一个符号,实际上(正如其他人所提到的)问题在于您的 List() case 语句。起初我误以为这意味着编译器打印的 case 语句存在问题。(就我而言,我认为我使用不正确的'::'。)
编译器消息的意思是该语句不可访问,与它指向的字符无关。正如其他人所提到的,该语句无法访问的原因是 List() 语句是一个包罗万象的,并且匹配不会流向其余的情况。
要解决此问题,请确保逻辑可以流向您的所有案例,并且不会陷入包罗万象的困境。即从最具体到最不具体。我也试图通过元素的数量来匹配一个列表,这是我的解决方案[编译并工作,没有警告!]:
def myFunction(myList: List[MyType]) = myList match {
case x1 :: x2 :: xs => // match 2+ elems
case x :: xs => // match 1+ elems
case Nil => // match 0 elems
但是,如果我重新排列前两行,我会再次收到无法访问的代码警告,因为匹配 2+ 的情况比 1+ 的情况更具体[不起作用,并且无法访问代码警告!]:
def myFunction(myList: List[MyType]) = myList match {
case x :: xs => // match 1+ elems
case x1 :: x2 :: xs => // match 2+ elems
case Nil => // match 0 elems