Scala方法不会编译

时间:2016-01-26 13:38:21

标签: list scala methods

我正在尝试创建一个递归方法,它将从列表中删除0并返回该列表。

def removeZero(lst: List[Int], num: Int) = lst match {
  case h :: tail => if (h == num)
      tail
    else 
      h :: removeZero(lst, num)
  case List() => List()
}

但是这不会编译。我收到StackOverflow错误。我试图找出问题所在。

1 个答案:

答案 0 :(得分:0)

看起来你想要:

def removeZero(lst: List[Int], num: Int): List[Int] = lst match {
  case h :: tail => if (h == num)
      tail
    else
      h :: removeZero(tail, num)
  case List() => List()
}

您在非空案例中的条件应将头部与num进行比较,而不是方法removeZero。在else分支中,您应该通过将尾部传递给递归调用而不是整个列表来递归列表。

相关问题