From: Daniel Schierbeck Date: 2006-05-08T20:46:01+09:00 Subject: More Proc Beauty The madness continues! This is getting out of hand! First, a recap: class Symbol def to_proc # leave out the `&block' unless # you're using Ruby 1.9 proc{|obj, *args, &block| obj.send(self, *args, &block) } end end # now we can do stuff like this: %w{dog cat monkey}.collect(&:upcase) => ["DOG", "CAT", "MONKEY"] # this is also mainly 1.9 stuff module Enumerable class Enumerator def &(name) each(&name) end end end # This is cool, but it looks kind of weird: %w{cat dog monkey}.collect&:reverse => ["tac", "god", "yeknom"] And here's the new stuff: # now, this is really, really stupid in a real-world app. # but hey, it's still pretty cool! def method_missing(name, *args) return name end # now just look at all the coolness! %w{dog cat monkey}.collect&upcase => ["DOG", "CAT", "MONKEY"] # You can even put spaces in! %w{dog cat monkey}.collect & reverse => ["tac", "god", "yeknom"] # this will of course break if the variable is defined upcase = "foobar" %w{dog cat monkey}.collect & upcase => TypeError I can't believe I used to write in PHP! Cheers, Daniel