这个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的块在哪里? 什么是符号:在这方面的名称? 我试图了解它是如何工作的。

One Solution collect form web for “这个Ruby代码中map(&:name)是做什么的?”

 events.map(&:name) 

完全等同于

 events.map{|x| x.name} 

这只是方便的语法糖。

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

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

  • ruby水龙头的优点
  • Ruby中的 - >(stab)运算符是什么?
  • ruby - 不能修改冻结的string(TypeError)
  • Ruby On Rails是为企业准备的吗?
  • 如何在Rails应用程序中使用基本authentication与httparty?
  • Ruby中的|| =(或 - 等于)是什么意思?
  • 如何closuresRails 3.1上的自动样式表/ JavaScript生成?
  • 无法在OSX Lion上使用RVM安装Ruby Enterprise Edition
  • 查找一组string中最长的共同起始子string
  • 在Ruby中,coerce()实际上是如何工作的?
  • 如何绘制git repo的代码历史行?