Struct arithmetic_eval::env::Environment  
source · pub struct Environment<T> { /* private fields */ }Expand description
Environment containing named Values.
Note that the environment implements the Index trait, which allows to eloquently
access or modify environment. Similarly, IntoIterator / Extend traits
allow to construct environments.
§Examples
use arithmetic_eval::{env::{Comparisons, Prelude}, Environment, Value};
// Load environment from the standard containers.
let mut env = Environment::<f64>::new();
env.extend(Prelude::iter().chain(Comparisons::iter()));
// Add a custom variable for a good measure.
env.insert("x", Value::Prim(1.0));
assert_eq!(env["true"], Value::Bool(true));
assert_eq!(env["x"], Value::Prim(1.0));
for (name, value) in &env {
    println!("{name} -> {value:?}");
}
// It's possible to base an environment on other env, as well.
let mut other_env = Environment::new();
other_env.extend(
    env.into_iter().filter(|(_, val)| val.is_function()),
);
assert!(other_env.get("x").is_none());Implementations§
source§impl<T> Environment<T>where
    StdArithmetic: OrdArithmetic<T>,
 
impl<T> Environment<T>where
    StdArithmetic: OrdArithmetic<T>,
source§impl<T> Environment<T>
 
impl<T> Environment<T>
sourcepub fn with_arithmetic<A>(arithmetic: A) -> Selfwhere
    A: OrdArithmetic<T> + 'static,
 
pub fn with_arithmetic<A>(arithmetic: A) -> Selfwhere
    A: OrdArithmetic<T> + 'static,
Creates an environment with the specified arithmetic.
sourcepub fn contains(&self, name: &str) -> bool
 
pub fn contains(&self, name: &str) -> bool
Checks if this environment contains a variable with the specified name.
sourcepub fn insert(&mut self, name: &str, value: Value<T>) -> &mut Self
 
pub fn insert(&mut self, name: &str, value: Value<T>) -> &mut Self
Inserts a variable with the specified name.
sourcepub fn insert_native_fn(
    &mut self,
    name: &str,
    native_fn: impl NativeFn<T> + 'static,
) -> &mut Self
 
pub fn insert_native_fn( &mut self, name: &str, native_fn: impl NativeFn<T> + 'static, ) -> &mut Self
Inserts a native function with the specified name.
sourcepub fn insert_wrapped_fn<const CTX: bool, Args, F>(
    &mut self,
    name: &str,
    fn_to_wrap: F,
) -> &mut Self
 
pub fn insert_wrapped_fn<const CTX: bool, Args, F>( &mut self, name: &str, fn_to_wrap: F, ) -> &mut Self
Inserts a wrapped function with the specified name.
Calling this method is equivalent to wrapping a function and calling
insert_native_fn() on it. Thanks to type inference magic,
the Rust compiler will usually be able to extract the Args type param
from the function definition, provided that type of function arguments and its return type
are defined explicitly or can be unequivocally inferred from the declaration.
Trait Implementations§
source§impl<T: Clone> Clone for Environment<T>
 
impl<T: Clone> Clone for Environment<T>
source§fn clone(&self) -> Environment<T>
 
fn clone(&self) -> Environment<T>
1.0.0 · source§fn clone_from(&mut self, source: &Self)
 
fn clone_from(&mut self, source: &Self)
source. Read moresource§impl<T: Debug> Debug for Environment<T>
 
impl<T: Debug> Debug for Environment<T>
source§impl<T> Default for Environment<T>where
    StdArithmetic: OrdArithmetic<T>,
 
impl<T> Default for Environment<T>where
    StdArithmetic: OrdArithmetic<T>,
source§impl<T, S, V> Extend<(S, V)> for Environment<T>
 
impl<T, S, V> Extend<(S, V)> for Environment<T>
source§fn extend<I: IntoIterator<Item = (S, V)>>(&mut self, iter: I)
 
fn extend<I: IntoIterator<Item = (S, V)>>(&mut self, iter: I)
source§fn extend_one(&mut self, item: A)
 
fn extend_one(&mut self, item: A)
extend_one)source§fn extend_reserve(&mut self, additional: usize)
 
fn extend_reserve(&mut self, additional: usize)
extend_one)source§impl<T> Index<&str> for Environment<T>
 
impl<T> Index<&str> for Environment<T>
source§impl<'r, T> IntoIterator for &'r Environment<T>
 
impl<'r, T> IntoIterator for &'r Environment<T>
source§impl<T> IntoIterator for Environment<T>
 
impl<T> IntoIterator for Environment<T>
Auto Trait Implementations§
impl<T> Freeze for Environment<T>
impl<T> !RefUnwindSafe for Environment<T>
impl<T> !Send for Environment<T>
impl<T> !Sync for Environment<T>
impl<T> Unpin for Environment<T>where
    T: Unpin,
impl<T> !UnwindSafe for Environment<T>
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
    T: ?Sized,
 
impl<T> BorrowMut<T> for Twhere
    T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
 
fn borrow_mut(&mut self) -> &mut T
source§impl<T> CloneToUninit for Twhere
    T: Clone,
 
impl<T> CloneToUninit for Twhere
    T: Clone,
source§default unsafe fn clone_to_uninit(&self, dst: *mut T)
 
default unsafe fn clone_to_uninit(&self, dst: *mut T)
clone_to_uninit)