Add multiple registrations of plugin function names.

This commit is contained in:
Stephen Chung 2020-09-10 12:10:49 +08:00
parent d527ef7dbf
commit 939f4413de

View File

@ -13,8 +13,8 @@ This Rust module can then either be loaded into an [`Engine`] as a normal [modul
registered as a [custom package]. This is done by using the `exported_module!` macro. registered as a [custom package]. This is done by using the `exported_module!` macro.
Using`#[export_module]` and `exported_module!` `#[export_module]` and `exported_module!`
--------------------------------------------- ----------------------------------------
Apply `#[export_module]` onto a Rust module to convert all `pub` functions into Rhai plugin Apply `#[export_module]` onto a Rust module to convert all `pub` functions into Rhai plugin
functions. functions.
@ -92,6 +92,8 @@ With `#[rhai_fn(name = "...")]`, multiple functions may be registered under the
Operators (which require function names that are not valid for Rust) can also be registered this way. Operators (which require function names that are not valid for Rust) can also be registered this way.
Registering the same function name with the same parameter types will cause a parsing error.
```rust ```rust
use rhai::plugins::*; // a "prelude" import for macros use rhai::plugins::*; // a "prelude" import for macros
@ -155,6 +157,38 @@ mod my_module {
``` ```
Multiple Registrations
----------------------
Parameters to the `#[rhai_fn(...)]` attribute can be applied multiple times.
This is especially useful for the `name = "..."`, `get = "..."` and `set = "..."` parameters
to give multiple alternative names to the same function.
```rust
use rhai::plugins::*; // a "prelude" import for macros
#[export_module]
mod my_module {
// This function can be called in five ways
#[rhai_fn(name = "get_prop_value", name = "prop", name = "+", set = "prop", index_get)]
pub fn prop_function(obj: &mut MyType, index: i64) -> i64 {
obj.prop[index]
}
}
```
The above function can be called in five ways:
| Parameter for `#[rhai_fn(...)]` | Type | Call style |
| ------------------------------- | :-------------: | --------------------------------------------- |
| `name = "get_prop_value"` | Method function | `get_prop_value(x, 0)`, `x.get_prop_value(0)` |
| `name = "prop"` | Method function | `prop(x, 0)`, `x.prop(0)` |
| `name = "+"` | Operator | `x + 42` |
| `set = "prop"` | Setter | `x.prop = 42` |
| `index_get` | Index getter | `x[0]` |
Fallible Functions Fallible Functions
------------------ ------------------