From: Krekna Mektek Date: 2006-12-30T01:52:50+09:00 Subject: Re: Another Q: find behavior Ah, so the return exits the loop, now I understand. @Joey: What I want to achieve? This is just an example from the book ;) Krekna 2006/12/29, Morton Goldberg : > 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 > >