我知道这是一个很短的问题。我理解"{}"代表一个循环。并且新操作员创建新的活动记录对象。
这条线路在铁轨上做什么?铅从哪里来?
Proc.new{|lead| lead.lead_details.name}
它创建新的Proc
对象。在这个例子中,lead
不是来自任何地方,因为这个Proc
没有被调用。但是,例如,您可以调用它,将其作为块传递。
leads = Lead.includes(:lead_details) # I assume it's an AR model, obviously
p = Proc.new { |lead| lead.lead_details.name }
names = leads.map(&p)
这样一来,lead
就来源于map
方法,并且像对象一样表示leads
数组的单个元素,它等价于:
leads.map { |lead| lead.lead_details.name }
您也可以"手动"调用此过程,显式传递参数,如下所示:
p.call(leads.first)
# => Whatever is leads.first.lead_details.name
您甚至可以将其作为块来编写自己的方法,例如:
def first_do(collection)
yield(collection.first)
end
first_do(leads, &p)
# => Whatever is leads.first.lead_details.name