Problem
In Ruby code, you quite often see the trick of using an expression like array.map(&:method_name)
as a shorthand form of array.map { |element| element.method_name }
. How exactly does it work?
When a parameter is passed with &
in front of it (indicating that is it to be used as a block), Ruby will call to_proc
on it in an attempt to make it usable as a block. Symbol#to_proc
quite handily returns a Proc
that will invoke the method of the corresponding name on whatever is passed to it, thus enabling our little shorthand trick to work.