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

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

Responder a