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)