[ruby-talk:02577] Re: String.succ

From: mrilu <mrilu@...>
Date: 2000-04-26 08:53:43 UTC
List: ruby-talk #2577
> In message "[ruby-talk:02575] String.succ"
>     on 00/04/26, Dave Thomas <Dave@thomases.com> 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?


In This Thread