2009/11/5 Jesù¸ Gabriel y GaláÏ <jgabrielygalan / gmail.com>:
> On Thu, Nov 5, 2009 at 8:25 AM, Robert Klemme
> <shortcutter / googlemail.com> wrote:
>> On 11/04/2009 06:10 PM, Aldric Giacomoni wrote:
>>>
>>> Robert Klemme wrote:
>>>>
>>>> IMHO this solution is even simpler because it does not need the method:
>>>>
>>>> h = Hash.new {|h,k| h[k] = Hash.new(&h.default_proc)}
>>>
>>> Robert - I agree. I like this one better. Feels a little more ruby-ish.
>>> Is there a way to use Proc (or whatever does work) to save this block and
>>> reuse it when creating a new hash ?
>>
>> The block *is* saved and reused when creating nested Hashes!
>>
>>> Something like :
>>> a = Proc.new {|h,k| h[k] = Hash.new(&h.default_proc)}
>>> b = Hash.new a
>>>
>>> Note, I know this is wrong.. It'll just put the proc as the default value,
>>> instead of triggering the proc.
>>
>> No need for that. lease look at my code again.
>
> I think he might want to save typing:
>
> a = Proc.new {|h,k| h[k] = Hash.new(&h.default_proc)}
> b = Hash.new &a
> c = Hash.new &a
> d = Hash.new &a
>
> Maybe this is his use case?

If I wanted to save typing I'd place the whole construction in a method

def cnh # silly name "create nested hash"
  Hash.new {|h,k| h[k] = Hash.new(&h.default_proc)}
end

a = cnh
b = cnh
c = cnh
d = cnh

Kind regards

robert

-- 
remember.guy do |as, often| as.you_can - without end
http://blog.rubybestpractices.com/