Scala类型不匹配问题
我目前正在尝试学习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
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的评论,我已经做到了。谢谢你更全面的解释!