I'm not a contributor, but I am a user of ruby, and there is a
possibility that no one seems to have mentioned. What about having
String.ord return an array of integers, with a one character string
returning a one element array?

So "test".ord => [116, 101, 115, 116]
"a".org => [97]

Under this scheme, referencing a particular number is no more
difficult then it is now, just instead of "test"[2].ord, you'd do
"test".ord[2]. The biggest disadvantage I can see is the requirement
for creating the array, which for big strings could get expensive.
However, if the user is worried about that they can just do
"test"[2].ord[0], which would be significantly less expensive (though
slightly more than the current scheme).

I agree that there shouldn't be methods that only work with certain
strings. That, I think, just causes confusion and goes against the
object-oriented principles of ruby.

On 2/7/07, Matt Pattison <matchbo / gmail.com> wrote:
> On 2/8/07, David Flanagan <david / davidflanagan.com> wrote:
> > Nikolai Weibull wrote:
> > > On 2/7/07, Sam Roberts <sroberts / uniserve.com> wrote:
> > >
> > >> Is creating a temporary 1-byte String really that expensive? Some
> > >> benchmarks showing an algorithm that uses a long binary string as a data
> > >> structure performs much faster with String#ord(i) than String#[i].ord
> > >> would probably convince everybody.
> > >
> > > May I beg for an /important/ algorithm?
> >
> > Geez!  What does it take to satisfy you guys!  :-)
> >
> > Seriously, though, I thought that my suggestion for an optional index
> > argument to ord was a modest and sensible one.  Actually, I thought I
> > was just pointing out an oversight and I'm surprised at the resistance
> > it has faced.  Given the richness of the core Ruby API, I assume that
> > decisions about adding methods are based on elegance, and that is
> > permitted or even desirable to have more than one way to do something.
>
> FWIW, I think ord_at or a similarly named method sounds like a good idea.
> It's simple, and it's a good future alternative to the Ruby 1.8 and earlier
> behaviour of String#[] (when given a Fixnum argument).
>
> <snip>
>
> > Anyway, I can see why encoding issues and multi-byte character issues
> > argue strongly for representing characters as a kind of String.  Has
> > anyone argued for creating a Character class that extends String?  This
> > would be a natural place to put methods like ord and digit? alpha?, etc.
> > Also, I tend to think that characters should be immutable (I'm not sure
> > why) and having a subclass would probably allow that.
>
> I think a Character class could be a good idea, as I felt slightly
> uncomfortable in the past indexing into a string and being returned a
> Fixnum, and whilst returning a String containing one character is an
> improvement, from a purely aesthetic perspective I would prefer to be
> returned a Character (derived from a String), and have methods
> designed to act on characters factored out into this Character class.
> However I am not a Unicode or Ruby internals or language API expert,
> so I don't have the same level of insight to add as others in this
> thread.
>
> Matt
>
>


-- 
Micah Wylde