From: "David A. Black" Date: 2005-11-23T23:14:21+09:00 Subject: Re: semenatics of if/unless/while statement modifiers Hi -- On Wed, 23 Nov 2005, Sean E. Russell wrote: > On Tuesday 22 November 2005 15:37, David A. Black wrote: >> Actually I meant what I wrote. Since 1 is always true, there's no >> point ever testing it for truth. (I purposely chose an example where >> you get the warning, which you don't if there's any point to the >> test.) > > Yeah, but I think what he was getting at was: > > def foo x > if n = x > blah(n) > end > end > > ... which he'd like to be able to do without being told that he's made a > mistake. Which he hasn't. Hence, his request that the warning be reworded > to "might", rather than "should". > > I think the point here is that the message that Ruby is giving is provably > wrong. If Stefan wrote the above code, then Ruby is wrong to tell him that > he "should" be performing a comparison rather than an assignment. But that code doesn't produce a warning: irb(main):011:0> def foo(x); if n = x; end; end => nil irb(main):012:0> foo(true) => nil The warning is "intelligent". It only appears in cases where there really is no possibility that the "if" can ever have two branches: irb(main):013:0> if n = true; end (irb):13: warning: found = in conditional, should be == => nil David -- David A. Black dblack@wobblini.net