que programar programa program libro lenguaje funcion filosofia cual codigo ruby

programar - ¿Cuál es la funcionalidad del operador "&:" en ruby?



programar en ruby (2)

Al anteponer & a un símbolo está creando una función lambda que llamará al método con un nombre de ese símbolo en el objeto que pasa a esta función. Teniendo esto en cuenta:

ar.map(&:reverse)

es aproximadamente equivalente a:

ar.map { |element| element.reverse }

Posible duplicado:
¿Qué significa map (&: name) en Ruby?

Me encontré con un fragmento de código que tenía lo siguiente

a.each_slice(2).map(&:reverse)

No sé la funcionalidad de &: operator. ¿Cómo funciona?


No hay un operador &: en Ruby. Lo que está viendo es el operador & aplicado a un :symbol

En una lista de argumentos de método, el operador & toma su operando, lo convierte en un objeto Proc si aún no lo está (llamando a to_proc en él) y lo pasa al método como si se hubiera usado un bloque.

my_proc = Proc.new { puts "foo" } my_method_call(&my_proc) # is identical to: my_method_call { puts "foo" }

Entonces la pregunta ahora es "¿Qué hace Symbol#to_proc do?", Y eso es fácil de ver en la documentación de Rails :

Convierte el símbolo en un proceso simple, que es especialmente útil para las enumeraciones. Ejemplos:

# The same as people.collect { |p| p.name } people.collect(&:name) # The same as people.select { |p| p.manager? }.collect { |p| p.salary } people.select(&:manager?).collect(&:salary)