evalexpr
evalexpr copied to clipboard
Feature Request: Add dot notation operator support (attribute getter)
Hi Mr. @ISibboI
I poke around the threads and find related issue: https://github.com/ISibboI/evalexpr/issues/117, this is similar to what I am looking for, I will make a pull request if you aggree with my proposal.
We would like to expand the dot notation to attribute getter operator, object.field will be redirected to a user defined function dot(object, "field", ()), the user is responsbible for implementing it, now we are able to mimic object in a simple way.
Expected usage
eval_with_context_mut("
f = future("IC2312");
bid = f.bid * 1.001;
// call the method
f.buy(30.5, 100);
// return the prices
(bid, f.ask, f.mid, f.last)
",
&mut context);
User defined dot functions will handle this:
future("IC2312")dot(f, "buy", (30.5, 100))dot(f, "ask", ())dot(f, "bid", ()), ...
Kindly review and discuss, thanks!
@ISibboI Do you have one minute to review this?
I've implemented this, please review the PR: https://github.com/ISibboI/evalexpr/pull/153, thanks!
#[test]
fn test_dot_attribute() {
let mut context = HashMapContext::new();
// omitted, check the PR
...
assert_eq!(
eval_with_context_mut(
"v = array(1,2,3,4,5);
v = v.push(6);
v.length == v.get(5)",
&mut context
),
Ok(Value::Boolean(true))
);
}