Multiple dispatch
Multiple dispatch allows us to declare multiple variants of the same function or method, each working only with a certain type of arguments.
For example, if we declare two functions with the same name, but with different types of parameters, Sidef will decide automatically which function to call:
func foo(Number a) {
say a
}
func foo(String a) {
say a
}
foo(1234) # calls the first function
foo("bar") # calls the second function
The functions are checked in the order in which they are declared:
func foo(Array a) { ... } # works with an array
func foo(Hash h) { ... } # works with an hash
func foo(any) { ... } # works with anything else
It also works with methods:
class Example {
method foo(Number n, String s) {
say "first"
}
method foo(Array a) {
say "second"
}
}
var obj = Example()
obj.foo(1234, "foo") # calls the first method
obj.foo([1,2,3]) # calls the second method