Nota al margen....
---------8<-------------------------------------
2009/7/6 Aureliano Calvo <[email protected]>
A mi siempre me resultó más fácil la notación &block. Así programaría mi
select:
class Array
def elegir( &condition )
result = []
self.each do
|elem|
result << elem if condition[elem]
end
result
end
end
---------8<-------------------------------------
Cuando estuvo Evan Phoenix en Locos x Rails, dio una charla de
optimizaciones y de las cosas que encontraron al desarrollar Rubinius y un
dato interesante fue que para el interprete Ruby es más óptimo no definir el
parámetro bloque y dejar que Ruby lo haga por defecto.
--
:: nelson ::
[ artesano de software & software craftsman ]
http://netflux.com.ar
Y lo usaría así:
>
> b = lista.elegir {|x| x > 6}
>
> puts b
> => [9, 7, 10, 8, 78]
>
> Las cosas importantes son:
> * el & antes del parámetro le dice que ese parámetro es el bloque que
> se pasa con la notación de bloque, y creo que siempre tiene que ser el
> último.
> * para llamar al bloque como una función hay que usar [] (corchetes)
> en vez de () (paréntesis)
> * igual que una función, un bloque toma y recibe parámetros.
>
> Usar yield nunca me terminó de cerrar, para mi el código queda más legible
> así.
>
> Mis 2 centavos,
> Aureliano.
>
> 2009/7/6 Cristhian Boujon <[email protected]>:
> > Gente, para aprender y comprender bien esto de realizar metodos que
> acepten
> > bloques como parámetros me plantié el siguiente problema "como haría un
> > select?"
> > no logré hacerlo
> > supongamos que tengo una lista = [1,9,5,4,6,2,7,10,6,8,78,3]
> > b = lista.select {|x| x > 6}
> >
> > puts b
> > => [9, 7, 10, 8, 78]
> >
> > con yield puedo devolver cada elemento de la lista, eso lo sé. Haciendo
> algo
> > así como
> >
> > for each element
> > yield(element)
> >
> > pero como hago la comprobación de la condicion x > 6
> >
> > y si es verdadero lo agrego en una lista?
> >
> > espero haber sido claro.
> > Saludos.
> >
> > --
> > Cristhian A. Boujon
> > ---------------------------------
> > http//esintuitivo.blogspot.com
> >
> > _______________________________________________
> > Ruby mailing list
> > [email protected]
> > http://lista.rubyargentina.com.ar/listinfo.cgi/ruby-rubyargentina.com.ar
> >
> >
> _______________________________________________
> Ruby mailing list
> [email protected]
> http://lista.rubyargentina.com.ar/listinfo.cgi/ruby-rubyargentina.com.ar
>
_______________________________________________
Ruby mailing list
[email protected]
http://lista.rubyargentina.com.ar/listinfo.cgi/ruby-rubyargentina.com.ar