这个Ruby代码中map(&:name)是做什么的?

为了更好的理解Ruby,我碰到了上网冲浪的代码:

require 'rubygems' require 'activeresource' ActiveResource::Base.logger = Logger.new("#{File.dirname(__FILE__)}/events.log") class Event < ActiveResource::Base self.site = "http://localhost:3000" end events = Event.find(:all) puts events.map(&:name) e = Event.find(1) e.price = 20.00 e.save e = Event.create(:name => "Shortest event evar!", :starts_at => 1.second.ago, :capacity => 25, :price => 10.00) e.destroy 

我特别感兴趣的是events.map(&:name)是如何工作的? 我看到事件是一个数组,因此它调用了它的映射方法。 现在我的问题是,传递给地图创build的块在哪里? 什么是符号:在这方面的名称? 我试图了解它是如何工作的。

 events.map(&:name) 

完全等同于

 events.map{|x| x.name} 

这只是方便的语法糖。

有关更多详细信息,请参阅此处的Symbol#to_proc方法。 这里, :name被强制转换为proc。

顺便说一句,这经常出现在这里 – 这只是很难谷歌或以其他方式search“与&符号冒号”:)。