From: SonOfLilit Date: 2007-02-18T21:05:29+09:00 Subject: Re: exit in a bloc DRY way... A google turns up this: In Ruby, break exits the block with value "nil". The caller must check after each closure call to see if the value returned was "nil", and break itself, if necessary. A side effect is that you can't return "nil" from a block without terminating the calling structure. (As it happens, this is almost always acceptable.) Use IRB to figure if indeed the standard methods that accept blocks do this checking. contact.each {|c| nb -= 1; exit; if c.from == parameter } # the second ; is definitely wrong Perhaps you meant: contact.each {|c| if c.from == parameter; nb -= 1; break; end } Well, if each is defined and the Enumerable mixin is mixed in (it usually is), you get #find for free, so: $ ri Enumerable#find -------------------------------------------------------- Enumerable#f ind enum.detect(ifnone = nil) {| obj | block } => obj or nil enum.find(ifnone = nil) {| obj | block } => obj or nil --------------------------------------------------------------------- --- Passes each entry in _enum_ to _block_. Returns the first for wh ich _block_ is not +false+. If no object matches, calls _ifnone_ and returns its result when it is specified, or returns +nil+ (1..10).detect {|i| i % 5 == 0 and i % 7 == 0 } #=> nil (1..100).detect {|i| i % 5 == 0 and i % 7 == 0 } #=> 35 So how about: nb = -1 if contact.find{|c| c.from == parameter } ? This seems good. Plug: Have a look at the adopt-a-newbie thread Aur Saraf On 2/18/07, Josselin wrote: > I wrote this code that's running well.. > origin = false > contact.each {|c| origin = true if c.from == parameter } > nb -= 1 if origin > > is there any way to write it in one line ? (exiting from the bloc when > the condition is true) > something like : > contact.each {|c| nb -= 1; exit; if c.from == parameter } > > tfyl > > joss > > > >