Closed kachick closed 8 years ago
Mapのキーの集合が全順序になっていないと、無理矢理値を入れることはできても、検索できなくなってしまうのではないでしょうか。 例えばパッチを適用して以下のようなコードを実行すると期待と違う結果になってしまいます。
$ ruby-trunk -I lib -r immutable -e 'm = Immutable::Map[{2.0 => 3, 2 => 5}]; p m[2]; p m[2.0]'
3
3
$ ruby-trunk -I lib -r immutable -e 'm = Immutable::Map[{a: 1, 2.0 => 3}]; p m[2.0]'
/home/shugo/src/immutable/lib/immutable/map.rb:181:in []': undefined method
<' for nil:NilClass (NoMethodError)
from -e:1:in `
大変失礼しました、格納後の動作が完全に考慮から外れていました。 該当部分 https://github.com/kachick/immutable/commit/7eec6e5c430a3e8aa7d02a0084f5861b8fdc4589 は本ブランチから外して置きました。
その後BasicObject#__id__
やObject#hash
の利用でなんとか出来ないかとも思ったのですが、やはり意味合いが変わってしまう為断念しました。
お手数をおかけしました。
Merged.
ありがとうございます!
Hashに近い感覚で使いやすくなるよう、いくつかのメソッドを追加しました。
また、Map.#[]の受け取ったハッシュのキーによっては、ペアが消えたり例外が出たため、これを調整しています。