On Dec 29, 2006, at 11:08 AM, Krekna Mektek wrote:

> Hi,
>
> Still learning from the Pickaxe book, and I've got a question about  
> this code:
>
> class Array
>  def find
>     for i in 0..size
>       value = self[i]
>       puts self[i]
>       return value if yield(value)
>     end
>     return nil
>   end
> end
>
> [1,3,5,7,9].find {|v| v*v > 30 }
>
> irb(main):369:0> [1,3,5,7,9].find {|v| v*v > 30 }
> => 7
>
>
> how come it prints only 7, and not also 9?
> The loop is not stopping as far as I can see, and 9 times 9 is also
> bigger then 30.

But the loop does stop when it reaches 7. As soon as 'yield(value)'  
evaluates to true, the 'return' is executed and both the method and  
the loop terminate.

Regards, Morton