我想实现一个函数来从给定的字符列表中检索所有括号
def getParentheses(chars: List[Char]): String = {
if (chars.isEmpty) ""
else {
val head = chars.head.toString
if (head == "(" || head == ")") head + getParentheses(chars.tail)
}
}
但是我在第五行的Scala IDE上一直收到一个关于类型不匹配的错误但该行对我来说很好
if (head == "(" || head == ")") head + getParentheses(chars.tail)
那我该怎么办呢?
感谢您的帮助!
答案 0 :(得分:1)
该错误表明getParentheses
期望String
作为返回值,但您的函数返回Unit
。 Scala函数中的最后一行是返回值,在您的情况下是返回if
的{{1}}。你必须重构第二个Unit
。以下是模式匹配的方法。
if
使用def getParentheses(chars: List[Char]): String = chars match {
case h::t if h == '(' || h == ')' => h + getParentheses(t)
case h::t => getParentheses(t)
case Nil => ""
}
进行此操作可能更为惯用。
filter
答案 1 :(得分:0)
使用PartialFunction的List.collect函数:
val isParentheses: PartialFunction[Char, Char] = {
case ch: Char if(ch == '(' || ch == ')' ) => ch
}
val onlyParentheses = listOfchars.collect(isParentheses)
注意我没有测试过这个解决方案,尽管它应该可行。
EDIT。
抱歉,我没有注意到您希望修复代码。我认为问题在于部分
head + getParentheses
你的函数返回String,head是Char。您确定可以使用+
将Char连接到String吗?