Velocity Reviews > Ruby > Question on do block

# Question on do block

CompGeek78
Guest
Posts: n/a

 07-31-2008
While going through some practice code from a book, I ran into an odd
issue with this do block.

The book put the code this way and it worked fine.

def mtdarry
10.times do |num|
square = num * num
return num, square if num > 7
end
end

num, square = mtdarry
puts num
puts square

This returns 8 and 64, which makes sense.

The problem I ran into is in changing the > to a =.

def mtdarry
10.times do |num|
square = num * num
return num, square if num = 7
end
end

num, square = mtdarry
puts num
puts square

At this point, it outputs 7 and 0. Why does it not calculate the value
of square properly?

Gregory Brown
Guest
Posts: n/a

 07-31-2008
On Thu, Jul 31, 2008 at 2:09 PM, CompGeek78 <(E-Mail Removed)> wrote:

> The problem I ran into is in changing the > to a =.
>
> def mtdarry
> 10.times do |num|
> square = num * num
> return num, square if num = 7
> end
> end

You want an equality check, not assignment.

>> a = 1

=> 1
>> a == 1

=> true
>> a == 2

=> false

num = 7 is always true, because all values except false and nil are
true in the boolean sense in Ruby.
num == 7 is only true when num is 7.

-greg

CompGeek78
Guest
Posts: n/a

 07-31-2008
On Jul 31, 12:14*pm, Gregory Brown <(E-Mail Removed)> wrote:
> On Thu, Jul 31, 2008 at 2:09 PM, CompGeek78 <(E-Mail Removed)> wrote:
> > The problem I ran into is in changing the > to a =.

>
> > def mtdarry
> > *10.times do |num|
> > * *square = num * num
> > * *return num, square if num = 7
> > *end
> > end

>
> You want an equality check, not assignment.
>
> >> a = 1

> => 1
> >> a == 1

> => true
> >> a == 2

>
> => false
>
> num = 7 is always true, because all values except false and nil are
> true in the boolean sense in Ruby.
> num == 7 is only true when num is 7.
>
> -greg