Когда &
используется перед объектом Proc при вызове метода, он обрабатывает Proc, как если бы он был обычным блоком после вызова.
Когда &
используется перед другим типом объекта (символ :first_name
в вашем случае) при вызове метода, он пытается чтобы вызвать to_proc для этого объекта, и если у него нет метода to_proc, вы получите TypeError
.
Обычно &:first_name
совпадает с &:first_name.to_proc
.
Symbol # to_proc Возвращает объект Proc которые отвечают на данный метод с помощью sym.
:first_name.to_proc
вернет Proc, который выглядит следующим образом:
proc { |obj, *args, &block| obj.first_name(*args, &block) }
этот Proc вызывает метод, указанный исходным символом на объекте, передаваемом в качестве первого параметра, и передает все остальные параметры + блок в качестве аргументов этого метода.
Еще один пример:
> p = :each.to_proc
=> #<Proc:0x00000001bc28b0>
> p.call([1,2,3]) { |item| puts item+1 }
2
3
4
=> [1, 2, 3]
person
Aliaksei Kliuchnikau
schedule
08.02.2012
map(&:name)
в Ruby?, Что такое&:capitalize
в Ruby?, Ярлык для Ruby / Ruby on Rails с амперсандом и двоеточием, Ruby:&:symbol
syntax,… - person Jörg W Mittag   schedule 08.02.2012&:last
конструкция Ruby?, Что вы называете оператором&:
в Ruby?, Что делаетmap(&:name)
в этом коде Ruby?, Что такое:+
и&+
в рубине?,&:views_count
вPost.published.collect(&:views_count)
, синтаксис Ruby Proc, Как«(1..4).inject(&:+)
»работает в Ruby,… - person Jörg W Mittag   schedule 08.02.2012&:property
?, Что означает&
в следующем синтаксисе рубина?, Зачем использовать унарный оператор для свойства в рубине? т.е.&:first
и как уArray#map
есть параметр, позволяющий делать что-то подобное?. - person Jörg W Mittag   schedule 08.02.2012