[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

Is this Ruby warning making sense???

rubyrus

2/27/2006 10:45:00 PM

Does anyone think if this the warning makes any sense?

irb(main):002:0> puts "abc" if (a=true)
(irb):2: warning: found = in conditional, should be ==
abc


I thought in ruby, everything is an expression, so a=true should return
true, and
if (true) is totally valid. Why does it give the warning?

Or is this a language design thing?

3 Answers

Marcin Mielzynski

2/27/2006 10:51:00 PM

0

rubyrus wrote:
> Does anyone think if this the warning makes any sense?
>
> irb(main):002:0> puts "abc" if (a=true)
> (irb):2: warning: found = in conditional, should be ==
> abc
>
>
> I thought in ruby, everything is an expression, so a=true should return
> true, and
> if (true) is totally valid. Why does it give the warning?
>
> Or is this a language design thing?
>

Any construction literal (true in this case) will produce such a warning
since its value is already known,

but:

b=true
puts "blah" if a=b

wont


lopex

rcoder@gmail.com

2/28/2006 3:23:00 AM

0

Writing 'if (foo = "bar")' instead of 'if (foo == "bar")' is a classic
error that has bitten many programmers, since it can be difficult while
quickly skimming the source code to determine whether the assignment
was intentional or simply a typo.

Since it's not technically invalid syntax, you just get a warning, but
I wouldn't recommend making heavy use of mixed assignment and test.

-Lennon

Malte Milatz

2/28/2006 10:08:00 AM

0

rubyrus schrieb:
> Does anyone think if this the warning makes any sense?
>
> irb(main):002:0> puts "abc" if (a=true) (irb):2: warning: found = in
> conditional, should be == abc

Yes, because you are testing an expression (a=true) though it's obvious in
this context that it will return true. This means that the `if` is
meaningless for `puts "abc"`.

You won't get the warning when you write `if true`, however. In this case
Ruby assumes that you wrote this intenionally, while in the above case, the
programmer might simply have failed to write ==.

Malte