On Dec 11, 2007, at 9:12 PM, Gary Wright wrote:

> Just because a Ruby method has two names doesn't mean that those
> two names are synonymous in general.


It's an interesting example of a leaky abstraction. On the one hand,  
we know that ! is an operator, but on the other hand, we say that it  
is a method. At the operator level, ! and !@ are identical, and it is  
at that level that the symbols are equal. The method side of things  
doesn't really enter in to it...

Except, it should. Because once we say that ! is not a built-in  
operator, but instead it is a method, then we must also patch up the  
abstraction by treating its name as the name of a method, and not the  
name of an operator. In that case

:"!@"  should not equal :"!" any more than :"map" should  
equal :"collect"

So, the move to support ! as a method and not an operator means (I  
believe) that the current symbol equality is wrong.



Cheers



Dave