Scala类型不匹配问题

Scala类型不匹配问题,scala,recursion,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 { f

我目前正在尝试学习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)
  }
}

但是,如果(!find('),chars.tail))行中出现
类型不匹配,必需:Boolean,find:Unit
。这怎么可能?我认为
find
递归函数将始终返回
布尔值。顺便说一句,我不知道我的解决方案是否正确,我只是被这个异常卡住了

如果/else
是scala中的表达式语句,那么它将返回一个值

省略
else
分支,编译器将为整个表达式推断
单元,因为它不能生成任何其他内容

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

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

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

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

省略
else
分支,编译器将为整个表达式推断
单元,因为它不能生成任何其他内容

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

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

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

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

省略
else
分支,编译器将为整个表达式推断
单元,因为它不能生成任何其他内容

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

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

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

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

省略
else
分支,编译器将为整个表达式推断
单元,因为它不能生成任何其他内容

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

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

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


如果
中的条件不满足,该怎么办?如果您不提供else部分,编译器将推断出
单元
,因为如果
失败,编译器不知道该怎么办。谢谢,那真的有效吗?coursera课程再次运行了吗?是的。今天是第一次作业的截止日期,所以赶快:)如果
中的条件不满足怎么办?如果您不提供else部分,编译器将推断出
单元
,因为如果
失败,编译器不知道该怎么办。谢谢,那真的有效吗?coursera课程再次运行了吗?是的。今天是第一次作业的截止日期,所以赶快:)如果
中的条件不满足怎么办?如果您不提供else部分,编译器将推断出
单元
,因为如果
失败,编译器不知道该怎么办。谢谢,那真的有效吗?coursera课程再次运行了吗?是的。今天是第一次作业的截止日期,所以赶快:)如果
中的条件不满足怎么办?如果您不提供else部分,编译器将推断出
单元
,因为如果
失败,编译器不知道该怎么办。谢谢,那真的有效吗?coursera课程再次运行了吗?是的。今天是第一次作业的截止日期,所以赶快:)是的,我已经完成了,多亏了@Ende Neu的评论。谢谢你更全面的解释!是的,感谢@Ende Neu的评论,我已经做到了。谢谢你更全面的解释!是的,感谢@Ende Neu的评论,我已经做到了。谢谢你更全面的解释!是的,感谢@Ende Neu的评论,我已经做到了。谢谢你更全面的解释!