Macro wlambda::set_vval_method
source · [−]macro_rules! set_vval_method {
($vv: expr, $obj: ident, $method: tt, $min: expr, $max: expr, $env: ident, $argc: ident, $b: block) => { ... };
}
Expand description
This macro helps with exporting something with a more OO interface instead of using a VValUserData trait implementation.
use wlambda::*;
use wlambda::set_vval_method;
let mut ctx = EvalContext::new_default();
let some_ref = std::rc::Rc::new(std::cell::RefCell::new(10));
let obj = VVal::map();
set_vval_method!(obj, some_ref, get_it, None, None, _env, _argc, {
Ok(VVal::Int(*some_ref.borrow()))
});
ctx.set_global_var("I", &obj);
assert_eq!(ctx.eval("I.get_it[]").unwrap().s(), "10");
*some_ref.borrow_mut() += 11;
assert_eq!(ctx.eval("I.get_it[]").unwrap().s(), "21");