向数组中添加元素时Scala类型不匹配

向数组中添加元素时Scala类型不匹配,scala,Scala,我有以下数组: var as = Array.empty[Tuple2[Int, Int]] 我正在添加一个元素,如下所示: var nElem = Tuple2(current, current) as += nElem current是Int类型的变量 但是,我遇到了以下错误: Solution.scala:51: error: type mismatch; found : (Int, Int) required: String as += nEl

我有以下数组:

var as = Array.empty[Tuple2[Int, Int]]
我正在添加一个元素,如下所示:

var nElem = Tuple2(current, current)
as += nElem
current是Int类型的变量

但是,我遇到了以下错误:

Solution.scala:51: error: type mismatch;
 found   : (Int, Int)
 required: String
                as += nElem
我不明白为什么会出现这种情况。我没有在任何地方声明字符串。

由于在某些情况下自动转换为字符串,+的语义很奇怪。要附加到数组,请使用:+方法:

+的语义很奇怪,因为在某些情况下会自动转换为字符串。要附加到数组,请使用:+方法:

使用:+=就地修改变量。但是,请记住:同时使用var和可变数据结构(如数组)是非常糟糕的编程的标志。不过,有时两者都可以

但是,请注意,此操作处于打开状态,因此像这样推动n个元素将是缓慢的,On²。数组不应该让元素像那样向后推。您也可以使用var向量,并在末尾对其调用.toArray,或者使用可变val ArrayBuffer。但是,您更喜欢函数式编程,除非它生成可读性较差的代码

另外,避免显式键入Tuple2。使用Array.empty[Int,Int]和var nElem=current,current.

使用a:+=就地修改变量。但是,请记住:同时使用var和可变数据结构(如数组)是非常糟糕的编程的标志。不过,有时两者都可以

但是,请注意,此操作处于打开状态,因此像这样推动n个元素将是缓慢的,On²。数组不应该让元素像那样向后推。您也可以使用var向量,并在末尾对其调用.toArray,或者使用可变val ArrayBuffer。但是,您更喜欢函数式编程,除非它生成可读性较差的代码

另外,避免显式键入Tuple2。使用Array.empty[Int,Int]和var nElem=current,current.

+=是字符串连接运算符。 您正在寻找要附加到数组的:+。请注意,数组长度是不可变的,因此:+=,将返回一个新数组,并附加nElem,并将其分配给as变量,原始数组将保持不变。请注意,这是一个提示,您可能正在以次优方式执行某些操作

请注意,如果您发现自己在使用var,这几乎总是代码中设计不好的标志。在函数式编程中,可变对象和变量被认为是非常糟糕的。有时,你不使用它们就无法逃脱,但这些都是罕见的情况。大多数情况下,您不应该需要可变性

另外,不要使用Tuple2。只需执行Array.empty[Int,Int],nElem=current,current等。

+=是字符串连接运算符。 您正在寻找要附加到数组的:+。请注意,数组长度是不可变的,因此:+=,将返回一个新数组,并附加nElem,并将其分配给as变量,原始数组将保持不变。请注意,这是一个提示,您可能正在以次优方式执行某些操作

请注意,如果您发现自己在使用var,这几乎总是代码中设计不好的标志。在函数式编程中,可变对象和变量被认为是非常糟糕的。有时,你不使用它们就无法逃脱,但这些都是罕见的情况。大多数情况下,您不应该需要可变性

另外,不要使用Tuple2。只需执行Array.empty[Int,Int],nElem=current,current等操作。

数组不是完全不可变的,只是它的长度与Java中的一样是不可变的。所以实际上,您既不能追加也不能删除,只能替换当前元素。数组并不是完全不可变的,只是它的长度和Java一样是不可变的。因此,实际上,您既不能追加也不能删除,只能替换当前元素。
as :+= nElem