35 lines
1.2 KiB
Markdown
35 lines
1.2 KiB
Markdown
Function Overloading
|
|
====================
|
|
|
|
{{#include ../links.md}}
|
|
|
|
|
|
Functions registered with the [`Engine`] can be _overloaded_ as long as the _signature_ is unique,
|
|
i.e. different functions can have the same name as long as their parameters are of different numbers
|
|
(i.e. _arity_) or different types.
|
|
|
|
New definitions _overwrite_ previous definitions of the same name, same arity and same parameter types.
|
|
|
|
~~~admonish tip "Tip: Overloading as a form of default parameter values"
|
|
|
|
Rhai does not support default values for function parameters.
|
|
|
|
However it is extremely easy to _simulate_ default parameter values via multiple overloaded
|
|
registrations of the same function name.
|
|
|
|
```rust
|
|
// The following definition of 'foo' is equivalent to the pseudo-code:
|
|
// fn foo(x = 42_i64, y = "hello", z = true) -> i64 { ... }
|
|
|
|
fn foo3(x: i64, y: &str, z: bool) -> i64 { ... }
|
|
fn foo2(x: i64, y: &str) -> i64 { foo3(x, y, true) }
|
|
fn foo1(x: i64) -> i64 { foo2(x, "hello") }
|
|
fn foo0() -> i64 { foo1(42) }
|
|
|
|
engine.register_fn("foo", foo0) // no parameters
|
|
.register_fn("foo", foo1) // 1 parameter
|
|
.register_fn("foo", foo2) // 2 parameters
|
|
.register_fn("foo", foo3); // 3 parameters
|
|
```
|
|
~~~
|