Char.type vs Char in 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 行显示"类型不匹配,预期:(字符类型,字符类型(实际:(字符,字符("。我对 scala 很陌生。有人可以解释这两种类型之间有什么区别以及我如何解决它吗?

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

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

方括号表示法用于指定参数类型。编译器对代码的解释是,您要创建一个初始化为包含元组(Char, Char)的新ListBuffer,即包含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)))
外括号分隔

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