私の知る限り、不変コレクションに適用される Scala コレクション操作は、構造共有のために前者の構造の多くを共有する新しいコレクションを返します。
私の質問は、これらの操作が新しい構造を返す可変データ構造にも適用できることを考えると、構造共有は不変コレクションと同様に適切ですか?
私の知る限り、不変コレクションに適用される Scala コレクション操作は、構造共有のために前者の構造の多くを共有する新しいコレクションを返します。
私の質問は、これらの操作が新しい構造を返す可変データ構造にも適用できることを考えると、構造共有は不変コレクションと同様に適切ですか?
いいえ、そのような共有は、内容が変更された新しいオブジェクトを返すことと、新しいオブジェクトが変更されたときに元のコレクションを変更しないことのいずれかに違反するためです。構造の共有は、不変コレクションでのみうまく機能します。これは、不変性により、一方のオブジェクトが変更されたときにもう一方のオブジェクトが変更されるリスクが排除されるためです。
もちろん、内容のレベルでの共有があります。たとえばmutable.List[String]
、新しいリストはString
元のリストと同じインスタンスへの参照を使用しますが、それで終わりです。