[英]Scala type mismatch issue
我目前正在尝试学习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
。 顺便说一句,我不知道我的解决方案是否正确,我只是被这个异常困住了。
if/else
是scala中的一个表达式语句,因此它返回一个值。
省略else
分支,会使编译器推断整个表达式的Unit
,因为它无法产生其他任何东西。
你必须返回一个Boolean
从每一个可能的分支,以匹配的方法返回类型Boolean
。
您可以通过执行以下操作来修复代码:
if(chars.head == '(' && !find(')', chars.tail)) {
return false
} else {
balance(chars.tail)
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.