Scala类型不匹配问题

时间:2014-09-28 15:26:33

标签: scala recursion

我目前正在尝试学习Scala,所以我决定编写一个简单的函数来检查括号是否在某个表达式中是平衡的。我的代码如下

def balance(chars: List[Char]): Boolean = {

  def find(par: Char, list: List[Char]): Boolean = {
    if(list.isEmpty) return false
    if(list.head == par) {
      return true
    } else {
      find(par, list.tail)
    }
  }

  if(chars.isEmpty) {
    return false
  }
  if(chars.head == '(') {
    if(!find(')', chars.tail)) {
      return false
    }
  } else {
    balance(chars.tail)
  }
}

但是我在type mismatch, required: Boolean, found: Unit行上获得了if(!find(')', chars.tail))。这怎么可能?我认为find递归函数将始终返回Boolean。顺便说一下,我不知道我的解决方案是否正确,我只是坚持这个例外。

1 个答案:

答案 0 :(得分:3)

if/else是scala中的表达式语句,因此它返回一个值。

离开else分支,使编译器推断整个表达式Unit,因为它不能产生任何其他内容。

您必须从每个可能的分支返回Boolean,以匹配Boolean的方法返回类型。

您可以通过执行以下操作来修复代码:

if(chars.head == '(' && !find(')', chars.tail)) {
  return false
} else {
  balance(chars.tail)
}