rhai/doc/src/language/method.md

34 lines
1.5 KiB
Markdown
Raw Normal View History

2020-06-20 06:06:17 +02:00
Call Method as Function
======================
{{#include ../links.md}}
2020-06-21 18:03:45 +02:00
Property getters/setters and methods in a Rust custom type registered with the [`Engine`] can be called
just like a regular function. In fact, like Rust, property getters/setters and object methods
are registered as regular functions in Rhai that take a first `&mut` parameter.
2020-06-20 06:06:17 +02:00
Unlike functions defined in script (for which all arguments are passed by _value_),
native Rust functions may mutate the object (or the first argument if called in normal function call style).
2020-06-21 18:03:45 +02:00
However, sometimes it is not as straight-forward, and methods called in function-call style may end up
not muting the object - see the example below. Therefore, it is best to always use method-call style.
2020-06-20 06:06:17 +02:00
Custom types, properties and methods can be disabled via the [`no_object`] feature.
```rust
let a = new_ts(); // constructor function
a.field = 500; // property setter
a.update(); // method call, 'a' can be modified
update(a); // <- this de-sugars to 'a.update()' thus if 'a' is a simple variable
// unlike scripted functions, 'a' can be modified and is not a copy
let array = [ a ];
update(array[0]); // <- 'array[0]' is an expression returning a calculated value,
2020-06-21 18:03:45 +02:00
// a transient (i.e. a copy), so this statement has no effect
2020-06-20 06:06:17 +02:00
// except waste a lot of time cloning
2020-06-21 18:03:45 +02:00
array[0].update(); // <- call in method-call style will update 'a'
2020-06-20 06:06:17 +02:00
```