Ruby map method syntax question

felix picture felix · Mar 8, 2011 · Viewed 7.2k times · Source

Possible Duplicate:
What does map(&:name) mean in Ruby?

I was watching railscasts more virtual attributes episode. In that episode, at one point, ryan used a map method syntax which I am not able to understand, Could someone please explain it?

tags.map(&:name).join(' ')

tags is an object of Tag Model, which has a name attribute. I am able to understand the meaning of this(I think so :)). All the tag object's name attribute are retrieved as an array and joined based on the ' '. But whats the deal with &:name

Thanks

Answer

Jakub Hampl picture Jakub Hampl · Mar 8, 2011

The & is a shortcut to Symbol#to_proc which will convert the symbol you pass to it to a method name on the object. So &:name converts to { |reciever| receiever.name } which is then passed to the map method.

It's a great way to make your code a lot more concise and avoid having tons of blocks all over the place.