Hash behavior query

irb(main):001:0> d = [1,2,3,4]
=> [1, 2, 3, 4]
irb(main):002:0> h = Hash.new
=> {}
irb(main):003:0> h[d] = "hello"
=> "hello"
irb(main):004:0> h
=> {[1, 2, 3, 4]=>"hello"}
irb(main):005:0> h[d]
=> "hello"
irb(main):006:0> d.push(5)
=> [1, 2, 3, 4, 5]
irb(main):007:0> h[d]
=> nil
irb(main):008:0> h
=> {[1, 2, 3, 4, 5]=>"hello"}
irb(main):009:0> d
=> [1, 2, 3, 4, 5]
irb(main):010:0> h[d]
=> nil
irb(main):011:0> h.rehash
=> {[1, 2, 3, 4, 5]=>"hello"}
irb(main):012:0> h[d]
=> "hello"
irb(main):013:0>

Is this expected or a bug?

-abhisek

Hi --

···

On Wed, 30 May 2007, Abhisek Datta wrote:

irb(main):001:0> d = [1,2,3,4]
=> [1, 2, 3, 4]
irb(main):002:0> h = Hash.new
=> {}
irb(main):003:0> h[d] = "hello"
=> "hello"
irb(main):004:0> h
=> {[1, 2, 3, 4]=>"hello"}
irb(main):005:0> h[d]
=> "hello"
irb(main):006:0> d.push(5)
=> [1, 2, 3, 4, 5]
irb(main):007:0> h[d]
=> nil
irb(main):008:0> h
=> {[1, 2, 3, 4, 5]=>"hello"}
irb(main):009:0> d
=> [1, 2, 3, 4, 5]
irb(main):010:0> h[d]
=> nil
irb(main):011:0> h.rehash
=> {[1, 2, 3, 4, 5]=>"hello"}
irb(main):012:0> h[d]
=> "hello"
irb(main):013:0>

Is this expected or a bug?

You've pretty much reproduced the documented example from the source
code, so I'd say it's expected :slight_smile:

David

--
Q. What is THE Ruby book for Rails developers?
A. RUBY FOR RAILS by David A. Black (http://www.manning.com/black\)
    (See what readers are saying! http://www.rubypal.com/r4rrevs.pdf\)
Q. Where can I get Ruby/Rails on-site training, consulting, coaching?
A. Ruby Power and Light, LLC (http://www.rubypal.com)

... and furthermore was there not somebody asking whether to prefer
Strings or Symbols as hash keys.
I think the example above gives you some hints, -- sometimes Strings
are still a good choice, but only sometimes.

Cheers
Robert

···

On 5/30/07, dblack@wobblini.net <dblack@wobblini.net> wrote:

Hi --

On Wed, 30 May 2007, Abhisek Datta wrote:

> irb(main):001:0> d = [1,2,3,4]
> => [1, 2, 3, 4]
> irb(main):002:0> h = Hash.new
> => {}
> irb(main):003:0> h[d] = "hello"
> => "hello"
> irb(main):004:0> h
> => {[1, 2, 3, 4]=>"hello"}
> irb(main):005:0> h[d]
> => "hello"
> irb(main):006:0> d.push(5)
> => [1, 2, 3, 4, 5]
> irb(main):007:0> h[d]
> => nil
> irb(main):008:0> h
> => {[1, 2, 3, 4, 5]=>"hello"}
> irb(main):009:0> d
> => [1, 2, 3, 4, 5]
> irb(main):010:0> h[d]
> => nil
> irb(main):011:0> h.rehash
> => {[1, 2, 3, 4, 5]=>"hello"}
> irb(main):012:0> h[d]
> => "hello"
> irb(main):013:0>
>
> Is this expected or a bug?

You've pretty much reproduced the documented example from the source
code, so I'd say it's expected :slight_smile:

--
You see things; and you say Why?
But I dream things that never were; and I say Why not?
-- George Bernard Shaw