Question
I found this code in [a RailsCast](http://railscasts.com/episodes/167-more-on- virtual-attributes):
def tag_names
@tag_names || tags.map(&:name).join(' ')
end
What does the (&:name)
in map(&:name)
mean?
Answer
It's shorthand for tags.map(&:name.to_proc).join(' ')
If foo
is an object with a to_proc
method, then you can pass it to a
method as &foo
, which will call foo.to_proc
and use that as the method's
block.
The Symbol#to_proc
method was originally added by ActiveSupport but has been
integrated into Ruby 1.8.7. This is its implementation:
class Symbol
def to_proc
Proc.new do |obj, *args|
obj.send self, *args
end
end
end