我有以下代码:
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)))
外括号分隔方法的参数列表,而内括号封装元组。