What does this hash do? Is this a hash?

R

ralf

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
 
T

ts

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
 
R

ralf

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
 
G

Gregory Seidman

On Mon, Apr 03, 2006 at 06:34:50PM +0900, ts wrote:
}
} 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
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,981
Messages
2,570,187
Members
46,731
Latest member
MarcyGipso

Latest Threads

Top