¿Qué hace map (&: name) en este código de Ruby?

Tratando de entender Ruby un poco mejor, me encontré con este código navegando por Internet:

require 'rubygems' require 'activeresource' ActiveResource::Base.logger = Logger.new("#{File.dirname(__FILE__)}/events.log") class Event  "Shortest event evar!", :starts_at => 1.second.ago, :capacity => 25, :price => 10.00) e.destroy 

En lo que estoy particularmente interesado es en cómo funciona events.map(&:name) ? Veo que los eventos son una matriz, y por lo tanto está invocando su método de mapa. Ahora mi pregunta es, ¿dónde está el bloque que se está transfiriendo al mapa creado? ¿Cuál es el símbolo: nombre en este contexto? Estoy tratando de entender cómo funciona.

 events.map(&:name) 

es exactamente equivalente a

 events.map{|x| x.name} 

es simplemente conveniente azúcar sintáctico.

Para obtener más información, consulte el método Symbol#to_proc aquí . Aquí,: el :name está siendo forzado a un proceso.

Por cierto, esto aparece a menudo aquí – es muy difícil buscar en Google o buscar “lo de los dos puntos con un símbolo” :).