From 939f4413de30edebdefeab3f6efcc075b51bcc88 Mon Sep 17 00:00:00 2001 From: Stephen Chung Date: Thu, 10 Sep 2020 12:10:49 +0800 Subject: [PATCH] Add multiple registrations of plugin function names. --- doc/src/plugins/module.md | 38 ++++++++++++++++++++++++++++++++++++-- 1 file changed, 36 insertions(+), 2 deletions(-) diff --git a/doc/src/plugins/module.md b/doc/src/plugins/module.md index 9f510998..40232140 100644 --- a/doc/src/plugins/module.md +++ b/doc/src/plugins/module.md @@ -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. -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 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. +Registering the same function name with the same parameter types will cause a parsing error. + ```rust 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 ------------------