Hi --

On Wed, 12 Feb 2003, Mathieu Bouchard wrote:

>
> On Sat, 8 Feb 2003 dblack / candle.superlink.net wrote:
>
> > 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 :-)
>
> To me, it doesn't seem logical for the Name class to exist; a Name may be
> "a kind of" String, but that doesn't mean it should be a subclass it...
> here are a few ideas i've been cooking lately about software modeling (an
> extension of my rants :-} about type checking):
[...]
> Which makes me doubt whether the example you are giving is applicable in
> real programs (or: whether it is good practice to apply it), and in turn,
> whether your point is valid.

Keep in mind that my point has nothing to do with advocacy of
inheriting from String.  It's about what happens when one *does*
inherit from String.  The "whether to do it" question is very
interesting to me (I started a thread on precisely that question on
ruby-talk yesterday), but it's tangential to the question under
discussion here.

What you're saying amounts to: if I can't think of a really great
example of this, then anyone who does it deserves to have the core
language shift under their feet.  Similarly, if inheriting from String
is a bad idea, then the only reason for the change we're discussing is
to punish people who've done it.  Somehow I don't think that's the
whole story :-)


David

-- 
David Alan Black
home: dblack / candle.superlink.net
work: blackdav / shu.edu
Web:  http://pirate.shu.edu/~blackdav