On Tue, Sep 28, 2010 at 4:03 PM, Jim Haungs <jhaungs / gmail.com> wrote:
> 10.times do |i|
> =A0puts 'too big' and break if i > 5
> =A0puts "#{i} ok"
> end
>
> I would expect this loop to quit after printing 0 to 5, but it executes
> all 10 times. I know "puts" return nil, but isn't "and" (as opposed to
> &&) supposed to execute both sides of the expression even if one side
> evaluates to false?

One option appears to be:

10.times do |i|
  puts 'too big' and break if i > 5
  puts "#{i} ok"
end

10.times do |i|
  (puts 'too big'; break) if i > 5
  puts "#{i} ok"
end

puts "done"

0 ok
1 ok
2 ok
3 ok
4 ok
5 ok
too big
6 ok
too big
7 ok
too big
8 ok
too big
9 ok
0 ok
1 ok
2 ok
3 ok
4 ok
5 ok
too big
done