Hi -- On Sat, 8 Feb 2003, Yukihiro Matsumoto wrote: > Hi, > > In message "Re: class of $1, $2 in 1.8.0" > on 03/02/07, dblack / candle.superlink.net <dblack / candle.superlink.net> writes: > > |Doesn't that kind of cascading (i.e., subclassing and overriding) take > |place all the time? It seems very natural to me. Also, until 1.8.0 > |this wasn't a problem; it's only now that the class of the objects has > |changed. I'm still not sure what the reason is for the change. It > |can't be just to catch people like me who override methods :-) > > Could you describe your error with concrete code? Sure. I'll give a simplified (but working) example, so as to avoid the whole underlying scanf architecture: class SpecializedString < String def to_i(s) # specialized overriding of to_i end end s = SpecializedString.new("12345") m = /(\d\d)/.match(s) n = m[1].to_i p n * 10 With 1.6.8: 120 With 1.8.0: matches.rb:22:in `to_i': wrong number of arguments(0 for 1) (ArgumentError) (because m[1] is a SpecializedString object, so the specialized to_i gets called). Note also that if the implementation of SpecializedString changes, then the behavior of #match also changes: class SpecializedString def initialize(s) @string = s end def to_str @string end end Now String#to_i gets called in 1.8.0 as well as 1.6.8. My thinking is: if $1,$2... are canonicalized to String, the behavior wouldn't change, and a new SpecializedString can always be created from a String. David -- David Alan Black home: dblack / candle.superlink.net work: blackdav / shu.edu Web: http://pirate.shu.edu/~blackdav