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)