"Robert Klemme" <bob.news / gmx.net> wrote...
>
> And then there is the third idiom:
>
> Integer === a
>
>...
>
> Btw: there's a gotcha with the idiom on the wiki:
>
> def fred(*args)
>   case args.collect { |a| a.type}
>     when [Float, Fixnum, String]
>       f, i, s = args
>       # ...
>
>
> This will not use Class#=== i.e. match only if the arguments' types match
> identical (instead of sub classes matching with superclasses for all the
> three idioms listed above).


My omissions were for simplicity; thanks for expanding, Robert.

Further, just after posting this, I read Tim Bates on duck typing
[ruby-talk:100516], and was convicted.

A well-designed program will usually not need to do that kind of thing.
Method overloading like that is a very static-typing thing to do. The Ruby
Way often obviates the need for such checks.