Forum: Ruby Is this Ruby warning making sense???

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
9ef7414c5aec5623c0411f919dfa1360?d=identicon&s=25 rubyrus (Guest)
on 2006-02-27 23:48
(Received via mailing list)
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?
B97225f66bb5caac601b12735d430a0d?d=identicon&s=25 Marcin MielżyÅ?ski (Guest)
on 2006-02-27 23:55
(Received via mailing list)
rubyrus wrote:
>
> 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
788622ab7e1f792ca653eeacbe5c1db3?d=identicon&s=25 rcoder (Guest)
on 2006-02-28 04:26
(Received via mailing list)
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
386f25c3bb2696a57b79e55a649769fb?d=identicon&s=25 Malte Milatz (Guest)
on 2006-02-28 11:18
(Received via mailing list)
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
This topic is locked and can not be replied to.