From: Robert Klemme Date: 2006-12-30T02:00:06+09:00 Subject: Re: Another Q: find behavior On 29.12.2006 17:08, 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 That line should read for i in 0...size Otherwise you will always throw nil at your test if it failed for all elements in the array. > 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? Because the "return" will immediately make the method exit. > The loop is not stopping as far as I can see, and 9 times 9 is also > bigger then 30. The loop will stop once the first match is found precisely because of the "return". Either you tested a different piece of code than you posted or you overlooked something. Kind regards robert