This is the implementation of flatMap
in Scala
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 }
What does ++=
mean here ?
++=
can mean two different things in Scala:
1: Invoke the ++=
method
In your example with flatMap
, the ++=
method of Builder
takes another collection and adds its elements into the builder. Many of the other mutable collections in the Scala collections library define a similiar ++=
method.
2: Invoke the ++
method and replace the contents of a var
++=
can also be used to invoke the ++
method of an object in a var
and replace the value of the var
with the result:
var l = List(1, 2)
l ++= List(3, 4)
// l is now List(1, 2, 3, 4)
The line l ++= List(3, 4)
is equivalent to l = l ++ List(3, 4)
.
Note that ++=
is a method, not a part of the Scala language. If it is defined for a particular class, then it has whatever meaning that class defines it to have. In this case it means "add these to the end."
Also note that if a class defines ++
but not ++=
then the compiler will treat
x ++= y
as
x = x ++ y
this is true generally for symbols ending in an equal sign (other than ==
, !=
, and =
, of course). This syntactic sugar allows immutable and mutable variants of the same data structure to be used in a consistent way.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With