Hi -- On Sat, 8 Feb 2003, J.Herre wrote: > It make sense that String#scan, String#slice, String#dup all return > various parts of > the given string. Would it make sense for SpecializeString#dup to > return a > String? Shouldn't #slice, #split and #scan do the same thing? > > Why not assume that a substring of a string is the same kind of string? > What's > the advantage of the old behavior? Even if the new class is specialized, substrings of it may not be similarly specialized -- in which case, it's misleading to have them be instances of the new class. For example: class Name < String def initial scan(/[A-Z]/)[0] end end n = Name.new("David") i = n.initial # String in 1.6.8, Name in 1.8.0 Here, it doesn't seem logical (to me) for an initial to be a Name object. (Yes, I could have done self[0].chr, but I need to illustrate this :-) I don't think having the initial be a String is a demotion in a case like this. It's just coincidence that the superclass of self's class happens to be the same as the class of objects returned by #scan. If you had: class Title < String def separator " " end end you wouldn't expect " " to be a Title object. Similarly (I would argue), the substring "D" is just a string, even though it happens to come from an operation on a Name object. David -- David Alan Black home: dblack / candle.superlink.net work: blackdav / shu.edu Web: http://pirate.shu.edu/~blackdav