From: "Haase, Konstantin" Date: 2011-11-01T09:32:59+09:00 Subject: [ruby-core:40589] Re: [ruby-trunk - Feature #5531][Open] deep_value for dealing with nested hashes What's the difference (usability wise) between hash[:foo][:bar] and hash.dv(:foo, :bar) Konstantin On Oct 31, 2011, at 16:52 , Kyle Peyton wrote: > > Issue #5531 has been reported by Kyle Peyton. > > ---------------------------------------- > 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 >