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