Trait meval::ContextProvider [−][src]
pub trait ContextProvider { fn get_var(&self, _: &str) -> Option<f64> { ... } fn eval_func(&self, _: &str, _: &[f64]) -> Result<f64, FuncEvalError> { ... } }
A trait of a source of variables (and constants) and functions for substitution into an evaluated expression.
A simplest way to create a custom context provider is to use Context
.
Advanced usage
Alternatively, values of variables/constants can be specified by tuples (name, value)
,
std::collections::HashMap
or std::collections::BTreeMap
.
use meval::{ContextProvider, Context}; let mut ctx = Context::new(); // built-ins ctx.var("x", 2.); // insert a new variable assert_eq!(ctx.get_var("pi"), Some(std::f64::consts::PI)); let myvars = ("x", 2.); // tuple as a ContextProvider assert_eq!(myvars.get_var("x"), Some(2f64)); // HashMap as a ContextProvider let mut varmap = std::collections::HashMap::new(); varmap.insert("x", 2.); varmap.insert("y", 3.); assert_eq!(varmap.get_var("x"), Some(2f64)); assert_eq!(varmap.get_var("z"), None);
Custom functions can be also defined.
use meval::{ContextProvider, Context}; let mut ctx = Context::new(); // built-ins ctx.func2("phi", |x, y| x / (y * y)); assert_eq!(ctx.eval_func("phi", &[2., 3.]), Ok(2. / (3. * 3.)));
A ContextProvider
can be built by combining other contexts:
use meval::Context; let bins = Context::new(); // built-ins let mut funcs = Context::empty(); // empty context funcs.func2("phi", |x, y| x / (y * y)); let myvars = ("x", 2.); // contexts can be combined using tuples let ctx = ((myvars, bins), funcs); // first context has preference if there's duplicity assert_eq!(meval::eval_str_with_context("x * pi + phi(1., 2.)", ctx).unwrap(), 2. * std::f64::consts::PI + 1. / (2. * 2.));
Provided Methods
fn get_var(&self, _: &str) -> Option<f64>
fn eval_func(&self, _: &str, _: &[f64]) -> Result<f64, FuncEvalError>
Implementations on Foreign Types
impl<'a, T: ContextProvider> ContextProvider for &'a T
[src]
impl<'a, T: ContextProvider> ContextProvider for &'a T
impl<'a, T: ContextProvider> ContextProvider for &'a mut T
[src]
impl<'a, T: ContextProvider> ContextProvider for &'a mut T
impl<T: ContextProvider, S: ContextProvider> ContextProvider for (T, S)
[src]
impl<T: ContextProvider, S: ContextProvider> ContextProvider for (T, S)
impl<S: AsRef<str>> ContextProvider for (S, f64)
[src]
impl<S: AsRef<str>> ContextProvider for (S, f64)
impl<S> ContextProvider for HashMap<S, f64> where
S: Hash + Eq + Borrow<str>,
[src]
impl<S> ContextProvider for HashMap<S, f64> where
S: Hash + Eq + Borrow<str>,
std::collections::HashMap
of variables.
impl<S> ContextProvider for BTreeMap<S, f64> where
S: Ord + Borrow<str>,
[src]
impl<S> ContextProvider for BTreeMap<S, f64> where
S: Ord + Borrow<str>,
std::collections::BTreeMap
of variables.
impl<S: AsRef<str>> ContextProvider for Vec<(S, f64)>
[src]
impl<S: AsRef<str>> ContextProvider for Vec<(S, f64)>
impl<S: AsRef<str>> ContextProvider for [(S, f64); 0]
[src]
impl<S: AsRef<str>> ContextProvider for [(S, f64); 0]
impl<S: AsRef<str>> ContextProvider for [(S, f64); 1]
[src]
impl<S: AsRef<str>> ContextProvider for [(S, f64); 1]
impl<S: AsRef<str>> ContextProvider for [(S, f64); 2]
[src]
impl<S: AsRef<str>> ContextProvider for [(S, f64); 2]
impl<S: AsRef<str>> ContextProvider for [(S, f64); 3]
[src]
impl<S: AsRef<str>> ContextProvider for [(S, f64); 3]
impl<S: AsRef<str>> ContextProvider for [(S, f64); 4]
[src]
impl<S: AsRef<str>> ContextProvider for [(S, f64); 4]
impl<S: AsRef<str>> ContextProvider for [(S, f64); 5]
[src]
impl<S: AsRef<str>> ContextProvider for [(S, f64); 5]
impl<S: AsRef<str>> ContextProvider for [(S, f64); 6]
[src]
impl<S: AsRef<str>> ContextProvider for [(S, f64); 6]
impl<S: AsRef<str>> ContextProvider for [(S, f64); 7]
[src]
impl<S: AsRef<str>> ContextProvider for [(S, f64); 7]
impl<S: AsRef<str>> ContextProvider for [(S, f64); 8]
[src]
impl<S: AsRef<str>> ContextProvider for [(S, f64); 8]
Implementors
impl<'a> ContextProvider for Context<'a>