On Apr 20, 2006, at 3:26 AM, Xavier Noria wrote:

> On Apr 20, 2006, at 1:51, John Johnson wrote:
>
>> I was wondering today, so I tried this:
>>
>> puts "It's true" if 0
>>
>> Which prints "It's true", meaning 0 is not false. (This should  
>> surprise C/C++/etc. people).
>>
>> So that means
>> puts "It's equal" if 0 == true
>
> You are seeing a particular case of the fact that the boolean  
> interpretation an object may be different from the object value  
> itself. And == is comparing object values, not boolean  
> interpretations. Then the result of == is interpreted in boolean  
> context, but by then 0 was seen as an integer already, which is  
> certainly different from the object true.
>
> To make it apparent take "foo". The string "foo" is true in boolean  
> context, but it won't surprise you to realise that "foo" == true  
> does not hold.
>
> -- fxn

Wouldn't it be neat if true === worked with anything that is  
interpreted as true

e.g.

case x
   when true
      ...
    else
      ...
end

Of course anyone would use an if statement in this situation, but it  
is kind of conceptually clean and sort of matches up with Range#===,  
Regexp#===, etc.