From: mrilu Date: 2000-04-26T10:53:43+02:00 Subject: [ruby-talk:02577] Re: String.succ > In message "[ruby-talk:02575] String.succ" > on 00/04/26, Dave Thomas writes: > > | "\377".succ # -> "\000" > | > |I _think_ I'd expect "\001\000". Me too. On Wed, 26 Apr 2000, Yukihiro Matsumoto wrote: > Ok, I define as following: > > "".succ == "" > "\377".succ == "\001\000" Sounds good. > I'll submit a patch in few days. Magic increment for binary strings > are done only if they contain no alpha numeric character. Everytime I hear magic associated with code I smile. Until I recognize it's not a status issue but really relates to the inner working of the code. I feel there's two different functionalities here, and the difference should be made clear. That allows one to use .succ without knowing "special cases". So the functionalities are: 1) succ as just defined, returning successing element into infinity - with numbers generate every time num+1 - with strings generates longer and longer strings as defined 2) succ as loopingly iterating over some space: - with strings, "\377".succ -> "\000", "\377\377".succ -> "\000\000" - object.succ(range) (possibly) As we have strings in two different classes I think those differentces should be make explicit. We could rename the second class (like next). Other solution could be to define class AlphaNumericString < String and overwrite succ. The problem here is that this class' unnatural, magically not incrementing succ should be renamed anyway :). Btw. the current implementation (1.5.quite_new) "\377\377".succ -> "\377\000" which does not fit into previous functionality classes and surprises me anyway. Should we have more functionality classes?