What does this hash do? Is this a hash?

Hi,
I’m tryin some hash functionality and came accros this in irb:

hash = Hash.new("")
=> {}
hash[“a”] << “b”
=> “b”
hash[“a”]
=> “b”
hash
=> {}
hash.size
=> 0
hash[“alskj”]
=> “b”

What ist this? Prog.Ruby says, that by “hash = Hash.new(”")" hash has a
default value for missing keys.
How can I set a value for a keys with the <<-method?

Thanks in advance
Ralf

“r” == ralf [email protected] writes:

r> hash = Hash.new(“”)
r> => {}
r> hash[“a”] << “b”

When you write this :

  1. ruby return the default value for the hash (‘a’ don’t exist as a
    key)
  2. concatenate “b” to this default value (see String#<<)

Finally you have modified the default value for the hash, and you can
see
this here :

r> hash[“alskj”]
r> => “b”

ruby now give the new default value

Guy Decoux

Thanks!
I think, it’s a bit confusing, that the dafault value is accessed by
“hash[“a”]”, i.e. the term for accessing a value according to key “a”.

The constuctor “Hash.new {block}” works for me:
ahash = Hash.new {|hash,key| hash[key] = “”}
=> {}
ahash[“a”] << “vier”
=> “vier”
ahash
=> {“a”=>“vier”}

Best regards
Ralf

On Mon, Apr 03, 2006 at 06:34:50PM +0900, ts wrote:
} >>>>> “r” == ralf [email protected] writes:
}
} r> hash = Hash.new(“”)
} r> => {}
} r> hash[“a”] << “b”
}
} When you write this :
} 1) ruby return the default value for the hash (‘a’ don’t exist as a
key)
} 2) concatenate “b” to this default value (see String#<<)
}
} Finally you have modified the default value for the hash, and you can
see
} this here :
}
} r> hash[“alskj”]
} r> => “b”
}
} ruby now give the new default value

This has to be the most frequently asked question on this list. Why
isn’t it
in the FAQ at http://www.rubygarden.org/faq/main/all ?

} Guy Decoux
–Greg