scala issue 5880 hashCode

0
komamitsu @komamitsu_tw

こないだScalaのhashCodeまわり眺めてたら, バグっぽいのみつけたのでバグ報告しといた. すごいレアなユースケースだけど... https://t.co/BpI1Tjig

2012-06-05 23:48:32
Kenji Yoshida @xuwei_k

イマイチどうbugなのかわからない・・・そして2.10だとこの辺りが結構変わってて、ソースコード追いかけようとしてもあばば(´・ω・`)

2012-06-06 00:00:49
Kenji Yoshida @xuwei_k

.@komamitsu_tw これバグとは言い切れなく無いですか?違うオブジェクトなら、できるだけ違うhashCode生成したほうがいいに越したことないですけれど・・・。ちなみにJavaでやっても同じ結果になりました https://t.co/dLmSt94G

2012-06-06 00:17:26
∃ugene 🥙yokot∀ @eed3si9n_ja

@komamitsu_tw ここでパッチよりも github の pull request を送るとコミットログに名前が残るし向こうも作業が楽になるかも /cc @xuwei_k

2012-06-06 00:34:07
Kenji Yoshida @xuwei_k

@jsuereth @komamitsu_tw reported https://t.co/ZV5xn4rk but I think it's no big deal. because similar behavior in Java https://t.co/dLmSt94G

2012-06-06 00:36:16
Kenji Yoshida @xuwei_k

このjavadocの記述は、"守るべき仕様" なのか "デフォルトの実装はこうなってますよ" っていうだけなのか http://t.co/HOXeVsxv http://t.co/cQa1B6JK っていう話がちょっと違う方向に?

2012-06-06 00:45:07
∃ugene -Yokota 🥙 mastodon.social/@eed3si9n @eed3si9n

@xuwei_k @jsuereth @komamitsu_tw as long as e1.equals(e2) implies e1.hashCode()==e2.hashCode() it's legal even if hashCode always returns 42

2012-06-06 00:50:47
komamitsu @komamitsu_tw

@xuwei_k hashCodeを再実装する場合 (equalsが再実装されているとき必要) 、各要素について41などの程よい素数を足したり掛けたりして、一意なhash値を作るよう実装するのが良いっぽいです。

2012-06-06 01:19:54
Kenji Yoshida @xuwei_k

@komamitsu_tw それはそうなんですけど、規約自体は守られてるから、明らかなバグというよりは、(このままでもそれほど問題ないけど)ちょっとした改善程度というか

2012-06-06 01:26:25
∃ugene 🥙yokot∀ @eed3si9n_ja

case class のオブジェクトなんかを Map とかに貯めていって後で作業するとかいう場合はたまたま中身が同じだったという理由で同値扱いされるのは助かったことよりも困ったことの方が多い気がする

2012-06-06 01:28:08
Kenji Yoshida @xuwei_k

あーたしかに、class異なっていても、同型で同じ要素だと、同じhashCode返るのか https://t.co/l6b4N7Uc http://t.co/vPhpJOQZ

2012-06-06 01:45:20
komamitsu @komamitsu_tw

@xuwei_k まぁ問題が発生しにくいものではありますねぇ。で、hashCodeの規約の話的にはそうなんですけども、結局、質の問題かなぁと。極端な話をしてしまうと、全て42返しても違反じゃないけど、実用に耐えられないよね、と。できる限り、質の良い挙動を目指すべきとは思っています

2012-06-06 01:49:54
Kenji Yoshida @xuwei_k

@komamitsu_tw まぁそうですね。ただ @eed3si9n_ja さんも言ってるようにpull request送ってしまったほうがいいかと。クリティカルでないものはパッチ送っても後回しにされがちで、以前もこんなことありましたし→ http://t.co/KzSWkAJJ

2012-06-06 02:00:37
komamitsu @komamitsu_tw

@eed3si9n_ja @xuwei_k お、そうですね。ありがとうございます~

2012-06-06 02:03:02