From: Josh Cheek Date: 2010-04-01T04:54:25+09:00 Subject: Re: Weird hash key: what am I asking Ruby to do? --000325561462ddb59b04831e1c63 Content-Type: text/plain; charset=ISO-8859-1 On Wed, Mar 31, 2010 at 12:32 PM, Aldric Giacomoni wrote: > I decided to type the following in irb: > irb(main):010:0> a = {} > => {} > irb(main):015:0> a[lambda { x } => 5] = 5 > => 5 > irb(main):016:0> a > => {{#=>5}=>5} > > irb(main):017:0> a = {} > => {} > irb(main):018:0> a[lambda { x } ] = 5 > => 5 > irb(main):019:0> a > => {#=>5} > > So.. In the first example, the hash key is 'lambda { x } => 5' . > What on earth does that even mean? > > It means that the key is a hash table which contains a key of the lambda, that maps to the value of 5. Notice all three sets of code are the same, the keys just get progressively more complicated looking. But if you didn't know what they were, and just considered them to be an object (which they are), then they are no longer so complicated, just complicated looking. key = 'simple' hash = Hash.new hash[ key ] = 5 hash # => {"simple"=>5} key[ key ] # => "simple" ########## key = lambda {x} hash = Hash.new hash[ key ] = 5 hash # => {#=>5} hash[ key ] # => 5 key = hash # the hash from the previous code block is now the key hash = Hash.new hash[ key ] = 5 hash # => {{#=>5}=>5} hash[ key ] # => 5 --000325561462ddb59b04831e1c63--