问题
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
回答1:
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.
回答2:
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.
来源:https://stackoverflow.com/questions/5231919/ruby-map-method-syntax-question