[Posted at
http://drnicwilliams.com/2006/09/28/new-magical-version-of-symbolto_proc/\]
Before the magic, let’s go through a Beginner’s Guide to Mapping, then
Advanced Guide to Symbol.to_proc, and THEN, the magical version. Its
worth it. Its sexy, nifty AND magical all at once.
* Beginner’s Guide to Mapping
list = [’1′, ‘2′, ‘3′]
=> ["1″, "2″, "3″]
list.map {|item| item.to_i}
=> [1, 2, 3]
Here we're invoking to_i on each item of the list and returning the
result into a new list. That's map/collect for you.
* Advanced Guide to Symbol.to_proc
After doing that a few times, you start wishing there was simpler
syntax. Enter: Symbol.to_proc
list.map &:to_i
=> [1, 2, 3]
It works. Just enjoy it. (see article for links on why it works)
* Magical version of Symbol.to_proc
Quite frankly, that’s still a lot of syntax. Plus, I normally forget to
added parentheses around the &:to_i, and then latter I want to invoke
another method on the result, so I need to add the parentheses which is
a pain… anyway. I thought of something niftier and dare I say, more
magical.
How about this syntax:
list.to_is
=> [1, 2, 3]
By passing the plural version of a method, the array automagically
performs the above mapping on itself using the singular version of the
method.
Sexy! And here's more examples:
(1..10).to_a.to_ss
=> ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10"]
(1..10).to_a.days
=> [86400, 172800, 259200, 345600, 432000, 518400, 604800, 691200,
777600, 864000]
[2,'two', :two].classes
=> [Fixnum, String, Symbol]
[2,'two', :two].classes.names
=> ["Fixnum", "String", "Symbol"]
[2,'two', :two].classes.names.lengths
=> [6, 6, 6]
So much happy syntax in one place!
I've got the library that gives you this syntax here:
http://drnicwilliams.com/2006/09/28/new-magical-version-of-symbolto_proc/
(at the bottom)
Nic
···
--
Posted via http://www.ruby-forum.com/\.