如何在Scala中解决此类型不匹配问题?

时间:2015-03-28 19:00:12

标签: scala

 def balance(chars: List[Char]): Boolean = {
    if (chars.isEmpty == true) true
       else transCount(chars, 0)

 def transCount(chars: List[Char], pro: Int): Boolean = {
  var dif = pro
  chars match {
    case "(" :: Nil => false
    case ")" :: Nil => dif -= 1; if (dif == 0) true else false
    case _ :: Nil => if (dif == 0) true else false

    case "(" :: tail => dif += 1
      transCount(tail, dif)
    case ")" :: tail => dif -= 1;
      if (dif < 0) false
      else transCount(tail, dif)
    case _ :: tail => transCount(tail, dif)
    }
  }
}

我有类型不匹配问题

Error:(30, 13) type mismatch;
 found   : String("(")
 required: Char
       case "(" :: Nil => false
            ^

但实际上不知道如何解决(请不要使用char.toList

1 个答案:

答案 0 :(得分:5)

chars被声明为List[Char]

但是,您的第一个模式是"(" :: Nil,这是一个List[String],因为"("是一个字符串 - 因此类型不匹配。

您需要一个字符文字'(',而不是字符串文字"("

当然,这同样适用于其他模式。