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?
on 2006-02-28 00:48
on 2006-02-28 00:55
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
on 2006-02-28 05:26
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
on 2006-02-28 12:18
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