> > Hi Ara, > > There is also Stash library (gem install stash -or- gem install > hashery). > > One difference between Stash and your Map, is that it uses Strings > rather then Symbols for keys so they can be garbage collected. > > Looks like we created these libraries for the same reason. I agree > with your statement "the ruby container you've always wanted". IMO > Ruby's built-in Hash should work like this because most of the time > that's really what we want. A Hash that allows for any type key could > be separate class instantiated explicitly. map does use strings: http://github.com/ahoward/map/blob/master/lib/map.rb#L123 big differences between the two libs actually: map is *always* ordered. stash does not appear to be... map also works recursively: ruby-1.8.7-p302 > require 'map' => true ruby-1.8.7-p302 > m = Map.new => {} ruby-1.8.7-p302 > m.update :k => {:a => {:x => 42}} => {"k"=>{"a"=>{"x"=>42}}} ruby-1.8.7-p302 > m['k']['a']['x'] => 42 stash does not: ruby-1.8.7-p302 > require 'stash' => true ruby-1.8.7-p302 > s = Stash.new => {} ruby-1.8.7-p302 > s.update :k => {:a => {:x => 42}} => {"k"=>{:a=>{:x=>42}}} ruby-1.8.7-p302 > s['k']['a']['x'] NoMethodError: undefined method `[]' for nil:NilClass from (irb):14 so there are definitely big differences between the libs at this point. just FYI. cheers.