IMHO, I think that having dispatch like this would be cool. But...
Issues:
1. It would have to be optional. Each parameter could be either a var (as
it is now) or a class and var pair to specify specialization.
2. Making it efficient could be difficult. It could potentially affect the
speed of all method lookups because a method call would have to get the
types of the arguments and try and find a matching method. If it can't find
one it would presumably use the totally generic case.
Example:
def a_method( a, b, c ) #generic case
...
end
def a_method( String a, Fixnum b, Fixnum c ) #specialized case
...
end
a_method( "hello", 10, 20 ) #calls specialized case above
a_method( 10, "hello", "there" ) #can't find specialized for
(Fixnum,String,String) so defaults to generic.
3. Bignum and Fixnum. Conversion between these are automatic. How does
this affect specialization?
Example:
def a_method( Fixnum a )
...
end
def a_method( Bignum a )
...
end
a_method( 1000 ) #calls Fixnum a_method
a_method( 100000000000000000000000000 ) #calls Bignum a_method
Is this desirable? Probably not.
--
Justin Johnson
"Bulat Ziganshin" <bulatz / integ.ru> wrote in message
news:67179315231.20020924111057 / integ.ru...
> Hello all and especially Matz,
>
> there is permanent discussion about adding overload facility to ruby
> and spirit of language. i want to add another cent to this :)
>
> now i can use overload library and write code such as:
>
> > def do_overload(i, s, f)
> > end
> > overload(:do_overload, Fixnum, String, Float)
> >
> > def do_overload(s, i, *a)
> > end
> > overload(:do_overload, String, Fixnum)
>
> all that i want - just the same (terrible, you are right) semantics
> with a bit more clear syntax and including this feature into ruby
> distribution:
>
> > def do_overload(Fixnum i, String s, Float f)
> > end
> > def do_overload(String s, Fixnum i, *a)
> > end
>
> although this don't correspond to dynamic spirit of language, in real
> world this adds lot of points to ease of use and even robustness of
> language
>
> --
> Best regards,
> Bulat mailto:bulatz / integ.ru
>
>