我目前正在尝试学习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
。顺便说一下,我不知道我的解决方案是否正确,我只是坚持这个例外。
答案 0 :(得分:3)
if/else
是scala中的表达式语句,因此它返回一个值。
离开else
分支,使编译器推断整个表达式Unit
,因为它不能产生任何其他内容。
您必须从每个可能的分支返回Boolean
,以匹配Boolean
的方法返回类型。
您可以通过执行以下操作来修复代码:
if(chars.head == '(' && !find(')', chars.tail)) {
return false
} else {
balance(chars.tail)
}