在scala中++和++之间的区别

时间:2018-05-02 15:45:50

标签: scala

object Dcoder extends App {
  var c = scala.collection.immutable.Map(12 -> "jd", 13 -> "ff")
  c = c ++ Map(16 -> "hh", 17 -> "℅")
  println(c)

  c ++= Map(18 -> "|||")
  println(c)
}

a = a ++ Map()以及a ++= Map()执行连接。 a=a++ba++=b的含义是否相同?

2 个答案:

答案 0 :(得分:4)

有时它们是相同的,有时它们不是。

如果集合是不可变的(例如List),那么它没有名为++=的特殊方法,所以声明

collection ++= someOtherCollection

是语法糖,它被贬低为

collection = collection ++ someOtherCollection

另一方面,大多数可变集合(例如ListBuffer)都有一个特殊的++=方法,所以

collection ++= someOtherCollection

通过添加所有元素collection来原位变异someOtherCollection

要确保++== ... ++的行为方式不同,请考虑以下两个示例:

var x = collection.mutable.ListBuffer(1, 2, 3)
val y = collection.mutable.ListBuffer(4, 5)
val z = x

x ++= y

println(x)
println(z)

打印

ListBuffer(1, 2, 3, 4, 5)
ListBuffer(1, 2, 3, 4, 5)

但是

var x = collection.mutable.ListBuffer(1, 2, 3)
val y = collection.mutable.ListBuffer(4, 5)
val z = x

x = x ++ y

println(x)
println(z)

打印

ListBuffer(1, 2, 3, 4, 5)
ListBuffer(1, 2, 3)

因为++强制创建一个全新的集合,而z未引用该集合。

答案 1 :(得分:0)

在整数

的情况下与a = a+2a+=2相同

对于第二个问题,a=a++ba++=b取决于a和b的类型。取决于他们是否支持++和++ =运算符