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

Responder a