Techいつもコードのことばかり考えている人のために。2018-09-15ScalaのmapValuesの挙動が2.13.0から変わっているので実装を調べてみたscalaのmapValuesは、Mapのvalueだけにmapを適用したい時に使用するメソッドです(Mapとmapでちょっと分かりづらいですが)。2.12.6で実行すると、以下のような結果になります。2.13.0ですが、先日リリースされた2.13.0-M5という開発途中のバージョンで実行すると、以下のような結果になりました。<function1>何か明らかに挙動が変わっています。何が変わったのか?ふとこの挙動の変化についてツイートしたところ、@xuwei_kさんに丁寧に教えていただきました。2.12.6における実装は以下の箇所の場所です(これも教えてもらった...ありがとうございます)。github.commapValuesはMapを返すように定義されていますが、実態はMappedValuesという型のインスタンスを返しています。この時点ではインスタンスが作られるだけで実はmapが実行されていません。valuesを取り出すまで(getが実行されるまで)mapValuesの引数に渡された変換関数は実行されていない、つまり遅延評価されるということです。この挙動が型から分からない、ということが課題になった、ということですね。確かにscaladocにも書かれていないし、型は普通のMapだし、全然分からないですね。2.13.0-M5での実装github.comMapView.MapValuesという型のインスタンスを返しています。MapViewの実装は以下の通りになっています。github.com先ほどの結果にキーを渡すと、変換されたvalueが得られました。WIZARDこの変更はmapValuesだけでなく、filterにも適用されています。filterなんかはよく使われていると思うので、けっこう影響が大きいかもしれないですね。2.13.0へのアップデートの時には気をつけましょう。2.13.0リリースに向けて、こちらを見ておくと良いでしょう。Type-Sを買った月別アーカイブはてなブログをはじめよう!magnoliakさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。