Cuando &
se usa antes del objeto Proc en la invocación del método, trata el Proc como si fuera un bloque ordinario después de la invocación.
Cuando &
se usa antes que otro tipo de objeto (símbolo :first_name
en su caso) en la invocación del método, intenta llamar a tocpro en este objeto y si no tiene el método to_proc obtendrá TypeError
.
Generalmente &:first_name
es lo mismo que &:first_name.to_proc
.
Symbol#to_proc Devuelve un objeto Proc que responde al método dado por sym.
:first_name.to_proc
volverá Proc que se ve así:
proc { |obj, *args, &block| obj.first_name(*args, &block) }
este método Proc invoca especificado por símbolo original en el objeto pasa como primer parámetro y pasar todos los parámetros de descanso + bloque ya que este método argumentos .
Un ejemplo más:
> p = :each.to_proc
=> #<Proc:0x00000001bc28b0>
> p.call([1,2,3]) { |item| puts item+1 }
2
3
4
=> [1, 2, 3]
Este es un duplicado de no menos de otros 16 preguntas que ya han sido formuladas y contestadas aquí en StackOverflow:. [Comprensión \ [ClassOne, ClassTwo \] cada \ (y : my_method \)] (http://StackOverflow.Com/q/99318/), [¿Qué significa 'map (&: name)' en Ruby?] (http://StackOverflow.Com/q/1217088/) , [¿Qué es exactamente '&: capitalize' en Ruby?] (Http://StackOverflow.Com/q/1792683/), [Ruby/Ruby on Rails y el acceso directo de dos puntos] (http://StackOverflow.Com/q/ 1961030 /), [Ruby: '&: symbol' syntax] (http://StackOverflow.Com/q/2096975/), ... –
... [¿Qué es esto' &: last' Ruby Construct Called?] (Http://StackOverflow.Com/q/2211751/), [¿Cómo se llama el '&:' operador en Ruby?] (http://StackOverflow.Com/q/2259775/), [¿Qué hace 'map (&: name)' hacer en este código de Ruby?] (http://StackOverflow.Com/q/2388337 /), [¿Qué son ': +' y '& +' en ruby?] (http://StackOverflow.Com/q/2697024/), ['&: views_count' en' Post.published. collect (&: views_count) '] (http://StackOverflow.Com/q/3888044/), [Ruby Proc Syntax] (http://StackOverflow.Com/q/4512587/), [¿Cómo funciona" '(1 ..4) .inject (&: +) '" trabajo en Ruby] (http://StackOverflow.Com/q/5003257/), ... –
... [¿Qué significa la siguiente declaración '&: property'?] (Http: //StackOverflow.Com/q/5620411/), [¿Qué significa '&' en la siguiente sintaxis de ruby?] (Http://StackOverflow.Com/q/5952175/), [¿Por qué uno usaría el operador unario? en una propiedad en ruby? es decir '&: first'] (http: // StackOverflow.Com/q/6289084 /), y [¿cómo 'Array # map' tiene un parámetro para hacer algo como esto?] (Http://StackOverflow.Com/q/6716629/). –