>Take a look at this for some clues:
>
>  $ irb
>  irb(main):001:0> events = {}
>  => {}
>  irb(main):002:0> events.default = []
>  => []
>  irb(main):003:0> events["trying"] << "hello"
>  => ["hello"]
>  irb(main):004:0> events.default
>  => ["hello"]
>  irb(main):005:0> events["test"]
>  => ["hello"]
>
>In short, what's happening is that when you call events["trying"] at
>statement 3, it returns the default value, which is an array. You then
>insert "hello" into that array and *change the default value*. Since
>you never assigned to events["trying"], it still doesn't exist. You
>were only getting the expected value back on re-access because of the
>changed default value.
>
>Try this instead:
>
>  $ irb
>  irb(main):001:0> events = Hash.new{ |h,k| h[k] = [] }
>  => {}
>  irb(main):002:0> events.default
>  => []
>  irb(main):003:0> events["trying"] << "hello"
>  => ["hello"]
>  irb(main):004:0> events.default
>  => []
>  irb(main):005:0> events["trying"]
>  => ["hello"]
>  irb(main):006:0> events["test"]
>  => []
>  irb(main):007:0> events
>  => {nil=>[], "test"=>[], "trying"=>["hello"]}
>
>This produces the desired behavior, but you have to be careful, since
>accessing non-existent keys will pollute the keys of your hash.
>
>--
>Jacob Fugal
>
>  
>

Oh thanks, i really had a misunderstood on that point.