From: Martin DeMello Date: 2006-02-07T18:58:20+09:00 Subject: lazy evaluation? Could someone explain why this code works: def repeat(condition) puts "condition: #{condition}" yield retry if not condition end j=0 repeat (j >= 10) do puts j j+=1 end puts "after loop, j = #{j}" I'd have expected repeat (j >= 10) to pass "false" into the method, which would then yield repeatedly to the do/end block, never seeing the (condition) part again. martin