Создает новый 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