[#6660] Ruby on Neko ? — Nicolas Cannasse <ncannasse@...>

Hi folks,

14 messages 2005/11/19

[#6672] testing for hardlink with "test(?-, ...)" flawed on Windows — noreply@...

Bugs item #2858, was opened at 2005-11-20 16:35

13 messages 2005/11/20

[#6684] semenatics of if/unless/while statement modifiers — Stefan Kaes <skaes@...>

Hi all,

81 messages 2005/11/21
[#6685] Re: semenatics of if/unless/while statement modifiers — Mauricio Fern疣dez <mfp@...> 2005/11/22

On Tue, Nov 22, 2005 at 08:22:59AM +0900, Stefan Kaes wrote:

[#6686] Re: semenatics of if/unless/while statement modifiers — Stefan Kaes <skaes@...> 2005/11/22

Mauricio Fern疣dez wrote:

[#6687] Re: semenatics of if/unless/while statement modifiers — Eric Hodel <drbrain@...7.net> 2005/11/22

On Nov 21, 2005, at 4:37 PM, Stefan Kaes wrote:

[#6689] Re: semenatics of if/unless/while statement modifiers — Stefan Kaes <skaes@...> 2005/11/22

Eric Hodel wrote:

[#6693] Re: semenatics of if/unless/while statement modifiers — Yukihiro Matsumoto <matz@...> 2005/11/22

Hi,

[#6695] Re: semenatics of if/unless/while statement modifiers — Stefan Kaes <skaes@...> 2005/11/22

Yukihiro Matsumoto wrote:

[#6718] Re: semenatics of if/unless/while statement modifiers — mathew <meta@...> 2005/11/22

[#6722] Re: semenatics of if/unless/while statement modifiers — Stefan Kaes <skaes@...> 2005/11/22

mathew wrote:

[#6707] Re: semenatics of if/unless/while statement modifiers — "David A. Black" <dblack@...> 2005/11/22

Hi --

[#6708] Re: semenatics of if/unless/while statement modifiers — Stefan Kaes <skaes@...> 2005/11/22

David A. Black wrote:

[#6714] Re: semenatics of if/unless/while statement modifiers — "David A. Black" <dblack@...> 2005/11/22

Hi --

[#6717] Re: semenatics of if/unless/while statement modifiers — Stefan Kaes <skaes@...> 2005/11/22

David A. Black wrote:

[#6798] ruby 1.8.4 preview2 — Yukihiro Matsumoto <matz@...>

Hi,

37 messages 2005/11/30

Re: semenatics of if/unless/while statement modifiers

From: "David A. Black" <dblack@...>
Date: 2005-11-23 15:02:43 UTC
List: ruby-core #6759
Hi --

On Wed, 23 Nov 2005, Stefan Kaes wrote:

> David A. Black wrote:
>
>> 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.
>> 
>> 
> Exactly.
>
>> 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
>
> This doesn't really make it any better. There is no way a program could read 
> the programmers mind to an extent that would enable the program to know 
> whether the assigment wasn't put there on purpose.
>
> Telling me I've made a mistake when I haven't, is a mistake ;-)
>
> So Ruby can't know whether occurence of an equal sign inside an "if" 
> condition is a programmers intention or not, unless the LHS of the assignment 
> is a constant expression. But that is a completely different error.

We're going around in circles, but the point still doesn't seem to be
clear.

Ruby sees a difference between:

   if n = x

and

   if n = 1

Why you would *ever* want to write the latter is a mystery to me :-)
I mean, you could also wrap your whole program with:

   if true && true && 100
     unless false || nil
     .... ad infinitum.

But why would you?  Besides, keep in mind that this is only a warning.
You *can* do "if n = 1", if you enjoy using those keys on your
keyboard so much that you can't resist :-)  But given that there's no
possibility that you would ever need to (and that in the general case
of if n = x you *don't* get a warning), it seems reasonable to be
warned.


David

-- 
David A. Black
dblack@wobblini.net

In This Thread