我有以下数组:
var as = Array.empty[Tuple2[Int, Int]]
我正在添加一个元素:
var nElem = Tuple2(current, current)
as += nElem
current
是var
Int
但是,我收到此错误:
Solution.scala:51: error: type mismatch;
found : (Int, Int)
required: String
as += nElem
我不明白为什么会出现这种情况。我还没有在任何地方声明String
。
答案 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