「Programming in Scala 3/e」という本を読んでいるうちに、私は次の質問に答えました。なぜmutable.Set.empty ++ = ++ではなくtreeSetですか?
scala> import scala.collections.immutable.TreeSet
scala> val colors = List("blue", "green", "red")
scala> val treeSet = TreeSet(colors)
scala> val mutaSet = mutable.Set.empty ++= treeSet
-> mutaSet: scala.collection.mutable.Set[String] =
Set(red, blue, green, yellow)
scala> val immutaSet = Set.empty ++ mutaSet
-> immutaSet: scala.collection.immutable.Set[String] =
Set(red, blue, green, yellow)
私が理解できないことは次の行で++=
方法の使用である:
まず、本は不変のセットから変更可能なセットを作成するために、ようなコードを書くことを説明します:
val mutaSet = mutable.Set.empty ++= treeSet
the Scala referenceによると、それはすなわち番目、私たちはxs ++= ys
を書くとき、それはxs
にys
のすべての要素を追加し、xs
の値を返すことを言います私たちが++=
メソッドと呼ぶとき、副作用です。
しかし、この説明が有効であるためには、mutable.Set.empty
は左辺値などでなければならず、つまり定数値ではありません。しかし、私はそうは思わない。
私たちがmutable.Set.empty ++= treeSet
が有効な表現である理由を誰でも説明できますか?
は、なぜあなたは 'mutable.Set.empty'が一定であるということだと思います有効なのですか? 'mutable.Set.empty'は実際には新しい空集合を返す関数です。 http://www.scala-lang.org/api/2.12.0/scala/collection/mutable/Set$.html#empty[A]:scala.collection.mutable.Set[A] –
ご返信ありがとうございます。しかし、私はまだ左値と右値の概念と混同しています。 Scalaでは、関数生成値に値を割り当てることができますか?この場合、なぜ '++'の代わりに '++ ='を使うのでしょうか? –