这个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中将数组输出到CSV
  • 如何获得rspec-2给出与testing失败关联的完整跟踪?
  • “for”和“Ruby”中的“each”
  • Ruby on Rails:黄瓜:我如何耙一个function?
  • 为什么我的基本Heroku应用程序需要两秒钟才能加载?
  • 如何在RVM安装过程中解决“gpg:command not found”错误?
  • 在Heroku中部署Rails 3.1项目时出现问题:无法findJavaScript运行时
  • 使用--no-rdoc和--no-ri与bundler