From: Alexey Muranov Date: 2011-11-01T20:34:29+09:00 Subject: [ruby-core:40619] [ruby-trunk - Feature #5531] deep_value for dealing with nested hashes Issue #5531 has been updated by Alexey Muranov. Konstantin Haase wrote: > Never mind, got it. > > On Oct 31, 2011, at 17:32 , Haase, Konstantin wrote: > > > What's the difference (usability wise) between > > > > hash[:foo][:bar] > > > > and > > > > hash.dv(:foo, :bar) > > > > Konstantin I'll answer anyway if someone else didn't get it :). { :foo => 1 }[2][3] raises NoMethodError, and { :foo => 1 }.[2,3] should return nil. ---------------------------------------- Feature #5531: deep_value for dealing with nested hashes http://redmine.ruby-lang.org/issues/5531 Author: Kyle Peyton Status: Open Priority: Normal Assignee: Category: Target version: This feature request stems from dealing with nested hashes, like the params from a request often dealt with in web frameworks. Conditional code often needs to be written with multiple logical ANDs in order to achieve what this simple function can: class Hash def deep_value(*ks) if ks.size == 1 return self[ks.shift] else val = ks.shift return (self[val].is_a?(Hash) ? self[val].deep_value(*ks) : nil) end end alias dv deep_value end deep_value (dv) will simply recurse over a hash given a set of indexes and return the value at the end. Example: > foo = {:bar => {:baz => 'blah'}} > foo.dv(:bar, :baz) -> 'blah' > foo.dv(:cats) -> nil -- http://redmine.ruby-lang.org