2011-03-15 6 views
7
numbers = 1..10 
print numbers.map {|x| x*x} 

# I want to do: 
square = {|x| x*x} 
print numbers.map square 

Porque la sintaxis es más concisa. ¿Hay alguna manera de hacerlo sin tener que usar def + end?¿Cómo puedo definir/nombrar un bloque en Ruby?

+0

Hay un par de maneras diferentes para crear una bloquear como un objeto, algunos de los cuales están en desuso. TIMTOWTDI realmente se aplica aquí. –

Respuesta

13
square = proc {|x| x**2 } 
print number.map(&square) 
+0

Gracias LBg, ¿qué hace y qué hay allí? –

+1

'&' transforma el objeto Proc en un bloque al método. –

1
numbers = 1..10 
square = lambda{|x| x*x } 
numbers.map &square 
8

No se puede asignar un bloque a una variable debido a un bloque que no es realmente un objeto en sí.

Lo que puede hacer, es asignar un objeto Proc a una variable, y luego convertir eso a un bloque usando el operador & prefijo unario:

numbers = 1..10 
print numbers.map {|x| x * x } 

square = -> x { x * x } 
print numbers.map &square 
+4

A quienquiera que haya editado mi respuesta, y las dos personas que aprobaron esa edición: si no tiene idea de lo que está haciendo, simplemente no lo haga. No tengo ningún problema con que la gente corrija mis errores, pero * presentarlos * no está bien. Mi código funciona perfectamente, el tuyo no solo no funciona, ni siquiera * analiza *. –

Cuestiones relacionadas