这个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“与&符号冒号”:)。