From: "Haase, Konstantin" Date: 2011-11-01T09:33:55+09:00 Subject: [ruby-core:40591] Re: [ruby-trunk - Feature #5531][Open] deep_value for dealing with nested hashes 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 > > 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 >> > >