From: Josh Cheek on 31 Mar 2010 15:54 [Note: parts of this message were removed to make it a legal post.] On Wed, Mar 31, 2010 at 12:32 PM, Aldric Giacomoni <aldric(a)trevoke.net>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 > => {{#<Proc:0x028cb304@(irb):15>=>5}=>5} > > irb(main):017:0> a = {} > => {} > irb(main):018:0> a[lambda { x } ] = 5 > => 5 > irb(main):019:0> a > => {#<Proc:0x028c2a4c@(irb):18>=>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 # => {#<Proc:0x000332e8@-:9>=>5} hash[ key ] # => 5 key = hash # the hash from the previous code block is now the key hash = Hash.new hash[ key ] = 5 hash # => {{#<Proc:0x000332e8@-:9>=>5}=>5} hash[ key ] # => 5
From: Aldric Giacomoni on 1 Apr 2010 08:08 Josh Cheek wrote: > On Wed, Mar 31, 2010 at 12:32 PM, Aldric Giacomoni > <aldric(a)trevoke.net>wrote: >> >> 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. > Hah! That makes perfect sense. I know what I'm doing next time I see a code obfuscation contest. Thanks! -- Posted via http://www.ruby-forum.com/.
From: Brian Candler on 1 Apr 2010 10:10 Aldric Giacomoni wrote: > So.. In the first example, the hash key is 'lambda { x } => 5' . > What on earth does that even mean? You can omit the hash braces in the last arg of a method call, i.e. fn(a=>b, c=>d) is short for fn({a=>b, c=>d}) foo[bar] is also a method call. It's short for foo.[](bar) irb(main):001:0> h = {} => {} irb(main):002:0> h[1=>2] = 3 => 3 irb(main):003:0> h => {{1=>2}=>3} -- Posted via http://www.ruby-forum.com/.
|
Pages: 1 Prev: Post-Condition if Statements And NameErrors Next: Weird hash key: what am I asking Ruby to do? |