scala.collection.mutable.Stack の version 間の違い



versionとか確認しないまま適当なこと言いましたすいません(´・ω・`)



2.8.1には、エラーメッセージの通り update 存在しません。


そういえば Stack の細かい部分変わったとかとか話題になってた気もしますが*1 普段たいしてStack使ってないので、ちゃんと覚えてませんでした。

2.8.1の mutable Stack のソース

2.9.1の mutable Stack のソース


Stackってつまり Stack なので push や pop するのに効率良くできてるので、 update(任意のindexの要素を入れ替える操作) 使うときってどういうときよ? って話になって、そもそもそんなに必要ないから 2.8.1 では入ってなかったんでしょうかね(という推測)


しかし、2.9.1だと継承関係も変わってて、(2.7から2.8のときほどではないが)微妙にコレクションクラスのアーキテクチャが変わっているようで


しなければならないわけですが、2.9.1の mutable Stack で update 実装されてますね。 しかし実装見れば分かる通り、Listを take したり drop したり 連結したりと、明らかに効率は良くないはずです。


よって、あたりまえですが、そもそも Stack の update はあまり使わない、もしくは、そもそも update を使わなければいけないならば、Stack 以外の class を使うことを検討したほうがよいです。使い捨てのプログラムで、パフォーマンス気にしなくていいのなら別ですが。


ところで Stack 関係ないですが、こういうときに、 方法 で簡単に version 切り替えられて便利ですね、sbt素晴らしいですね

*1: なんかよく見るとtoStringの表示が逆になってますよね?