在Scala中,“++=”是什么意思?

9
这是Scala中flatMap实现
def flatMap[B, That](f: A => GenTraversableOnce[B])(implicit bf: CanBuildFrom[Repr, B, That]): That = {
  def builder = bf(repr) // ...
  val b = builder
  for (x <- this) b ++= f(x).seq
  b.result
}
这里的++=是什么意思?
3个回答

17

++= 在Scala中有两种不同的含义:

1:调用++=方法

在使用flatMap的例子中,Builder++=方法将另一个集合的元素添加到构建器中。Scala集合库中的许多其他可变集合都定义了类似的++=方法。

2:调用++方法并替换var的内容

++=也可以用于在var中调用对象的++方法,并用结果替换var的值:

var l = List(1, 2)
l ++= List(3, 4)
// l is now List(1, 2, 3, 4)

l ++= List(3, 4) 这行代码等价于 l = l ++ List(3, 4)


5
请注意,++=是一种方法,而不是Scala语言的一部分。如果它被定义为某个类的一部分,则它具有该类定义的任何含义。在这种情况下,它的意思是“将这些添加到末尾”。
还要注意,如果一个类定义了++但没有定义++=,那么编译器会处理
x ++= y

as

x = x ++ y

通常情况下,以等号结尾的符号(当然除了==!==)都适用于这个规则。这种语法糖使得同一数据结构的不可变和可变变体可以以一致的方式使用。


1

Builder的API中说:

将TraversableOnce生成的所有元素添加到此可增长集合中。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接