从字符列表中获取括号

时间:2014-05-05 20:46:55

标签: scala recursion

我想实现一个函数来从给定的字符列表中检索所有括号

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)

那我该怎么办呢?

感谢您的帮助!

2 个答案:

答案 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吗?