Overloads provide two axes by which you can create variants of a method: they let you omit arguments by supplying a reasonable default, and they let you pass in a value whose type is similar to (but different from) the “main” type. For instance, you can imagine a method
add(double n, RoundingMode mode)with an overload
add(long n). That second overload would call the first variant, casting the
Lots of languages let you omit arguments by providing default values:
add(n, mode=HALF_UP)or similar. Effes will, too, but it’s tough for a statically typed language to handle the arg-of-similar-type problem. The only thing you can really do is to accept a supertype, like
add(Number n). But to do that, you need control over the type hierarchy, which you obviously may not have.
In Effes, you can use disjunctive types instead:
add(n: Double|Long): d = case n of Double: n Long: n toDouble -- e.g., if there's no automatic type promotion ...