"value update is not a member of scala.collection.mutable.Stack" とかw どゆこと...。
versionとか確認しないまま適当なこと言いましたすいません(´・ω・`)
2.8.1には、エラーメッセージの通り update 存在しません。
そういえば Stack の細かい部分変わったとかとか話題になってた気もしますが*1 普段たいしてStack使ってないので、ちゃんと覚えてませんでした。
Stackってつまり Stack なので push や pop するのに効率良くできてるので、 update(任意のindexの要素を入れ替える操作) 使うときってどういうときよ? って話になって、そもそもそんなに必要ないから 2.8.1 では入ってなかったんでしょうかね(という推測)
しかし、2.9.1だと継承関係も変わってて、(2.7から2.8のときほどではないが)微妙にコレクションクラスのアーキテクチャが変わっているようで
- Stack は SeqLike を継承してる
- SeqLike には update が abstract member として存在する
- なので、「Stackでupdateを実装する」または「update を実装してるtrait を mixin」
しなければならないわけですが、2.9.1の mutable Stack で update 実装されてますね。 しかし実装見れば分かる通り、Listを take したり drop したり 連結したりと、明らかに効率は良くないはずです。
よって、あたりまえですが、そもそも Stack の update はあまり使わない、もしくは、そもそも update を使わなければいけないならば、Stack 以外の class を使うことを検討したほうがよいです。使い捨てのプログラムで、パフォーマンス気にしなくていいのなら別ですが。
ところで Stack 関係ないですが、こういうときに、こ の 方法 で簡単に version 切り替えられて便利ですね、sbt素晴らしいですね
*1: なんかよく見るとtoStringの表示が逆になってますよね?