ts <decoux / moulon.inra.fr> writes: > >>>>> "D" == Dave Thomas <Dave / PragmaticProgrammer.com> writes: > > D> I'm guessing > D> that the Foo object is undergoing the same treatment, and therefore > D> that Ruby can't tell the resulting copied key from the next "hello" > D> that comes along. > > In reality this is because you can't change String#hash. > > Well, you can, but ruby will not use it internally (this was why I've > said "but don't try to redefine #hash for String" in [ruby-talk:8034]) But you should be able to subclass String and use it as a hash key. I think that the special treatments that Strings receive should only appear to class == String. Subclasses of string should be treated like any other object. This will even have the correct default behavior, as if the sub class doesn't define eql? and hash, it will be treated identically to a String, and hence we'll see the existing behavior. Regards Dave