Is this Ruby warning making sense???

R

rubyrus

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?
 
M

Marcin Mielżyński

rubyrus said:
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
 
R

rcoder

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
 
M

Malte Milatz

rubyrus said:
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
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,755
Messages
2,569,536
Members
45,009
Latest member
GidgetGamb

Latest Threads

Top