Scala中的Char.type与Char

时间:2015-12-12 23:31:40

标签: scala

我有以下代码:

def findNonEqualTuples(value: String): List[(Char, Char)] = {
    val result = ListBuffer((Char,Char))
    for (current <- 0 until value.length / 2) {
      if (!value.charAt(current).equals(value.charAt(value.length - 1 - current))) {
        val tuple = (value.charAt(current), value.charAt(value.length - 1 - current))
        result += tuple
      }
    }
    return result.toList
  }

result += tuple表示“类型不匹配,预期:(​​Char.type,Char.type)actual :( Char,Char)”。我对scala很新。有人可以解释这两种类型之间有什么区别以及我如何修复它?

1 个答案:

答案 0 :(得分:2)

您的问题在于如何声明result ListBuffer。尝试:

val result = ListBuffer[(Char,Char)]()

方括号表示法用于指定参数类型。编译器对您的代码的解释是您要创建一个新的ListBuffer初始化为包含元组(Char, Char),即包含Char 类型的元组(更准确地说,正如@LuigiPlinge所指出的,它是Char伴侣对象 - 与自身配对) - 因此不匹配错误。

编辑 - 解决评论中的问题:

这是一个不同类型的大括号问题:) 关键是要记住,即使Scala中的运算符实际上是方法调用, 所以result += (...)实际上是糖:

result = result.+(...) // since "op=" is sugar for x = x op ...

即。使用括号中包含的参数调用+=方法。因此,要传递由元组组成的单个参数,我们需要一组额外的括号:

result += ((value.charAt(current), value.charAt(value.length - 1 - current)))

外部括号分隔方法的参数列表,而内部括号封装元组。