--- "David A. Black" <dblack / wobblini.net> wrote:
> Hi --
> 
> On Wed, 11 May 2005, Eric Mahurin wrote:
> 
> >>> Thanks.  I assumed that the StringIO class inherited from
> >> the
> >>> IO class since it has all of the same methods.  So the
> >> proper
> >>> Ruby style is to use respond_to? instead of kind_of? to
> see
> >>> what "type" your arguments are?
> >>
> >> The common Ruby style is to not check at all, but just
> send
> >> the messages
> >> needed to get the job done.  If the object is
> inappropriate,
> >> Ruby will
> >> catch it and let you know what it didn't like.
> >
> > I was referring to the case when a method does different
> things
> > based on the argument "types" (i.e. String#[]=).  I'll just
> > start using "respond_to?" instead.  I was using both.
> 
> I think Jim was referring to that case too :-)
> 
> In a slightly oversimplified nutshell, you've got three main
> possibilities:
> 
>    * class/module name/ancestry checking (kind_of?/is_a?)
>    * type checking (respond_to?)
>    * "duck typing" (what Jim described -- a programming
> technique
>        in its own right, not a subdivision of checking)
> 
> I've listed them in increasing order of what I'd call
> resonance with
> the underlying dynamism of Ruby objects.  In a certain sense,
> in fact,
> you're always doing duck typing when you send a message to an
> object
> in Ruby, because you've agreed up front to work with objects
> whose
> type can change during runtime.
> 
> "And etc.", as my students sometimes say.  There's a ton more
> on this
> in the archives... so I'll save a few electrons here :-)

Yep.  That's the same priority I have - no checking
(preferred), respond_to?, and finally kind_of? (least
preferred).  The only time I'm using kind_of? now is
"kind_of?Numeric".  Even where I want integers, I found Numeric
more useful to handle cases where +/- infinity and even -0
(-0.1) makes sense.  For example, a -0 would have been useful
as an index for String/Array#[].



		
Discover Yahoo! 
Stay in touch with email, IM, photo sharing and more. Check it out! 
http://discover.yahoo.com/stayintouch.html