56 lines
1.8 KiB
Markdown
56 lines
1.8 KiB
Markdown
Override a Built-in Function
|
|
============================
|
|
|
|
{{#include ../links.md}}
|
|
|
|
Any similarly-named function defined in a script _overrides_ any built-in or registered
|
|
native Rust function of the same name and number of parameters.
|
|
|
|
```js
|
|
// Override the built-in function 'to_float' when called as a method
|
|
fn to_float() {
|
|
print(`Ha! Gotcha! ${this}`);
|
|
42.0
|
|
}
|
|
|
|
let x = 123.to_float();
|
|
|
|
print(x); // what happens?
|
|
```
|
|
|
|
```admonish tip.small "Tip: Monkey patching Rhai"
|
|
|
|
Most of Rhai's built-in functionality resides in registered functions.
|
|
|
|
If you dislike any built-in function, simply provide your own implementation to
|
|
_override_ the built-in version.
|
|
|
|
The ability to modify the operating environment dynamically at runtime is called
|
|
"[monkey patching](https://en.wikipedia.org/wiki/Monkey_patch)."
|
|
It is rarely recommended, but if you need it, you need it bad.
|
|
|
|
In other words, do it only when _all else fails_. Do not monkey patch Rhai simply
|
|
because you _can_.
|
|
```
|
|
|
|
```admonish info.small "Search order for functions"
|
|
|
|
Rhai searches for the correct implementation of a function in the following order:
|
|
|
|
1. Rhai script-defined [functions],
|
|
|
|
2. Native Rust functions registered directly via the `Engine::register_XXX` API,
|
|
|
|
3. Native Rust functions in [packages] that have been loaded via `Engine::register_global_module`,
|
|
|
|
4. Native Rust or Rhai script-defined functions in [imported][`import`] [modules] that are exposed to
|
|
the global [namespace][function namespace] (e.g. via the `#[rhai_fn(global)]` attribute in a
|
|
[plugin module]),
|
|
|
|
5. Native Rust or Rhai script-defined functions in [modules] loaded via
|
|
`Engine::register_static_module` that are exposed to the global [namespace][function namespace]
|
|
(e.g. via the `#[rhai_fn(global)]` attribute in a [plugin module]),
|
|
|
|
6. [Built-in][built-in operators] functions.
|
|
```
|