[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

What does this hash do? Is this a hash?

ralf

4/3/2006 9:26:00 AM

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

3 Answers

ts

4/3/2006 9:35:00 AM

0

>>>>> "r" == ralf <stark.dreamdetective@googlemail.com> 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


ralf

4/3/2006 9:47:00 AM

0

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

Gregory Seidman

4/3/2006 11:48:00 AM

0

On Mon, Apr 03, 2006 at 06:34:50PM +0900, ts wrote:
} >>>>> "r" == ralf <stark.dreamdetective@googlemail.com> 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/fa... ?

} Guy Decoux
--Greg