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