Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Ruby map method syntax question [duplicate]

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

like image 249
felix Avatar asked Dec 07 '22 22:12

felix


2 Answers

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.

like image 64
Jakub Hampl Avatar answered Dec 22 '22 02:12

Jakub Hampl


It's shorthand for tags.map(:name.to_proc) which is like calling tags.map{|tag| tag.name } and just collects all the tag names into an array.

like image 21
idlefingers Avatar answered Dec 22 '22 04:12

idlefingers