List 为什么++;=在Scala中不使用相同的列表吗?

List 为什么++;=在Scala中不使用相同的列表吗?,list,scala,List,Scala,我知道+++=用于将一个列表附加到另一个列表。然而,当附加列表本身不可用时,它似乎不起作用。当我运行此代码时: var a = ListBuffer[Int](1, 2, 3) a ++= a println(a) 程序似乎陷入了无限循环,从未停止过。应用程序陷入困境的原因是您正在将可变列表添加到自身中。加法++=在右侧迭代,并在左侧添加元素。但是,当右边等于左边时,每一个加法都在右边增加,而且永远不会到最后。导致无限循环 这是导致问题的ListBuffer.addAll方法的来源 def a

我知道+++=用于将一个列表附加到另一个列表。然而,当附加列表本身不可用时,它似乎不起作用。当我运行此代码时:

var a = ListBuffer[Int](1, 2, 3)
a ++= a
println(a)

程序似乎陷入了无限循环,从未停止过。

应用程序陷入困境的原因是您正在将可变列表添加到自身中。加法
++=
在右侧迭代,并在左侧添加元素。但是,当右边等于左边时,每一个加法都在右边增加,而且永远不会到最后。导致无限循环

这是导致问题的
ListBuffer.addAll
方法的来源

def addAll(xs:IterableOnce[A]):this.type={
val it=xs.iterator
while(it.hasNext){
addOne(it.next())
}
这
}
您应该使用
a=a++a
将两个集合连接到一个新集合中,而不修改原始集合并将结果分配给变量
a

Scala不支持在应用操作符
=
后重新分配,比如Java,它提供了模拟这种行为的操作符,但实际上它们有不同的实现


因此,
a++=a
a=a++a

a=a++a
并不完全相同。尽可能避免可变项。(这几乎总是可能的。)