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.
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 forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.