将元素添加到数组时Scala类型不匹配

时间:2016-01-09 15:35:27

标签: scala

我有以下数组:

var as = Array.empty[Tuple2[Int, Int]]

我正在添加一个元素:

var nElem = Tuple2(current, current)
as += nElem

currentvar

类型的Int

但是,我收到此错误:

Solution.scala:51: error: type mismatch;
 found   : (Int, Int)
 required: String
                as += nElem

我不明白为什么会出现这种情况。我还没有在任何地方声明String

3 个答案:

答案 0 :(得分:3)

+=是字符串连接运算符。 您正在寻找附加到数组的:+。请注意,Array长度是不可变的,因此:+=将返回一个新数组,并附加nElem,并将其分配给as变量,原始数组将保持不变(以此为暗示,你可能会以次优的方式做某事)。

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

另外,请勿使用Tuple2。只需Array.empty[(Int, Int)]nElem = (current, current)等。

答案 1 :(得分:2)

使用:+=修改变量。但是,请记住这一点:同时使用var和可变数据结构(如Array)表示编程非常糟糕。但有时候要么很好。

但是,请注意,此操作为O(n),因此推动n个元素将变慢,O(n²)。数组并不意味着像这样将元素推向后面。您也可以使用var Vector代替.toArray()并在其末尾调用val ArrayBuffer或使用可变Tuple2。但是,更喜欢函数式编程,除非它产生的代码不太可读。

另外,请避免明确键入Array.empty[(Int, Int)]。使用nElem = (current, current)和var uwsgi

答案 2 :(得分:1)

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

as :+= nElem