rhai icon indicating copy to clipboard operation
rhai copied to clipboard

arguments lost in nested object calls?

Open stargazing-dino opened this issue 1 year ago • 1 comments

I register a function that operates on a function pointer

let mut engine = Engine::new();

engine.register_fn("name_of_function", |x: &mut FnPtr| {
    println!("name of function: {:?}", x.fn_name());
});
fn my_cool_function() {
    // 
}

my_cool_function.name_of_function()

This successfully prints "my_cool_function". The signature of name_of_function is also correctly (Fn)

I then read about JS Style scriptable event handlers and am inspired to make a map for my function state:

let map = #{ foo: 42 };

fn my_cool_function() {
    this.foo += 1;
    // 
}

map.my_cool_function();

This pattern is useful and seems to work for my purposes.

However, doing this does not work.

map.my_cool_function.name_of_function();

I get this error:

called `Result::unwrap()` on an `Err` value: ErrorFunctionNotFound("name_of_function (())", 16:23)

Is this expected behavior?

stargazing-dino avatar Nov 07 '24 06:11 stargazing-dino

Rhai is not JavaScript. Therefore methods are not stored as properties in the hash map.

map.my_cool_function() means my_cool_function(map), in Rust style, not JavaScript style.

Therefore, map has no property named my_cool_function.

schungx avatar Nov 07 '24 09:11 schungx

Closing this issue for now. Feel free to reopen.

schungx avatar Sep 17 '25 02:09 schungx