On 03.09.2007 06:50, 7stud -- wrote: > In the code: > > h = Hash.new {|hash, key| hash[key] = []} > > what method is yielding the values hash, key to the code block? It > doesn't seem like it could be new() since new() isn't called when you > lookup a key in a hash. Does new() somehow associate that block with > the method [] in Hash? $ ruby -e 'h=Hash.new {|h,k| h[k]=[]}; set_trace_func(lambda {|*a| p a}); h[1]<<2' ["line", "-e", 1, nil, #<Binding:0x1002fdf4>, false] ["c-call", "-e", 1, :[], #<Binding:0x1002fdb8>, Hash] ["c-call", "-e", 1, :default, #<Binding:0x1002fca0>, Hash] ["c-call", "-e", 1, :call, #<Binding:0x1002fb9c>, Proc] ["line", "-e", 1, nil, #<Binding:0x1002f9a8>, false] ["c-call", "-e", 1, :[]=, #<Binding:0x1002f8a4>, Hash] ["c-return", "-e", 1, :[]=, #<Binding:0x1002f868>, Hash] ["c-return", "-e", 1, :call, #<Binding:0x1002f778>, Proc] ["c-return", "-e", 1, :default, #<Binding:0x1002f688>, Hash] ["c-return", "-e", 1, :[], #<Binding:0x1002f598>, Hash] ["c-call", "-e", 1, :<<, #<Binding:0x1002f4a8>, Array] ["c-return", "-e", 1, :<<, #<Binding:0x1002f3b8>, Array] I believe there's also some explanation in the documentation. Kind regards robert