ventajas tutorial sirve rails que para documentacion desventajas descargar ruby

tutorial - ruby wikipedia



Atajo de colon de rubĂ­ y signo (2)

No hay nada especial en la combinación del símbolo y el símbolo. Aquí hay un ejemplo que (ab) usa la expresión regular:

class Regexp def to_proc ->(str) { self =~ str ; $1 } end end %w(station nation information).map &/(.*)ion/ => ["stat", "nat", "informat"]

O enteros.

class Integer def to_proc ->(arr) { arr[self] } end end arr = [[*3..7],[*14..27],[*?a..?z]] arr.map &4 => [7, 18, "e"]

¿Quién necesita arr.map(&:fifth) cuando tiene arr.map &4 ?

Posible duplicado:
¿Qué significa mapa (&: nombre) en Ruby?

En Ruby, sé que si lo hago:

some_objects.each(&:foo)

Es lo mismo que

some_objects.each { |obj| obj.foo }

Es decir, &:foo crea el bloque { |obj| obj.foo } { |obj| obj.foo } , lo convierte en un Proc, y lo pasa a cada uno. ¿Por qué funciona esto? ¿Es solo un caso especial de Ruby, o hay alguna razón por la que esto funciona como lo hace?


Su pregunta es incorrecta, por así decirlo. Lo que está sucediendo aquí no es "ampersand and colon", es "ampersand and object". Los dos puntos en este caso son para el símbolo. Entonces, hay & y hay :foo .

El & llama to_proc en el objeto, y lo pasa como un bloque al método. En Rails, to_proc se implementa en Symbol , de modo que estas dos llamadas son equivalentes:

something {|i| i.foo } something(&:foo)

Además, to_proc en Symbol se implementa en Ruby 1.8.7 y 1.9, por lo que de hecho es una "cosa de rubí".

Entonces, para resumir: & llama to_proc en el objeto y lo pasa como un bloque al método, y Ruby implementa to_proc en Symbol .