En tu caso, al hacer 'yield(elemento)' lo que estás haciendo es
justamente la comparación (estás invocando al bloque que se le pasó al
método con un elemento como parámetro).
Si 'yield(elemento)' regresa verdadero, significa que 'elemento > 6'.
Otra manera de hacerlo es declarar exlícitamente el bloque como
parámetro de tu método e invocarlo con 'call':
def metodo(ary, &block)
ary.each do |value|
if block.call(value)
puts "verdadero"
else
puts "falso"
end
end
return "retorno"
end
==
def metodo(ary)
ary.each do |value|
if yield(value)
puts "verdadero"
else
puts "falso"
end
end
return "retorno"
end
No pienses que yield 'devuelve' nada, al llamar a yield estás haciendo
lo mismo que con block.call, invocando al bloque, pero en ningún
momento retornás del método original. En los ejemplos que te di,
recién en la línea 'retorno "retorno"' estás "volviendo" de método.
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