尝试更好地理解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)
如何运作?我看到事件是一个数组,因此它正在调用它的map方法。现在我的问题是,传递给地图的块在哪里创建?符号是什么:在这种情况下的名称?我试图了解它是如何工作的。
答案 0 :(得分:21)
events.map(&:name)
完全等同于
events.map{|x| x.name}
它只是方便的语法糖。
有关详细信息,请查看Symbol#to_proc
方法here。在这里,:name
被强制转换为proc。
顺便说一下,这里经常会出现这种情况 - 谷歌或者用“&”号搜索'结肠的东西'是非常困难的:)。