Struct rhai::Scope [−][src]
pub struct Scope<'a> { /* fields omitted */ }
Expand description
Type containing information about the current scope.
Useful for keeping state between Engine
evaluation runs.
Thread Safety
Currently, Scope
is neither Send
nor Sync
.
Turn on the sync
feature to make it Send
+
Sync
.
Example
use rhai::{Engine, Scope}; let engine = Engine::new(); let mut my_scope = Scope::new(); my_scope.push("z", 40_i64); engine.eval_with_scope::<()>(&mut my_scope, "let x = z + 1; z = 0;")?; assert_eq!(engine.eval_with_scope::<i64>(&mut my_scope, "x + 1")?, 42); assert_eq!(my_scope.get_value::<i64>("x").unwrap(), 41); assert_eq!(my_scope.get_value::<i64>("z").unwrap(), 0);
When searching for entries, newly-added entries are found before similarly-named but older entries, allowing for automatic shadowing.
Implementations
impl<'a> Scope<'a>
[src]
impl<'a> Scope<'a>
[src]pub fn clear(&mut self) -> &mut Self
[src]
pub fn clear(&mut self) -> &mut Self
[src]Empty the Scope
.
Example
use rhai::Scope; let mut my_scope = Scope::new(); my_scope.push("x", 42_i64); assert!(my_scope.contains("x")); assert_eq!(my_scope.len(), 1); assert!(!my_scope.is_empty()); my_scope.clear(); assert!(!my_scope.contains("x")); assert_eq!(my_scope.len(), 0); assert!(my_scope.is_empty());
pub fn push(
&mut self,
name: impl Into<Cow<'a, str>>,
value: impl Variant + Clone
) -> &mut Self
[src]
pub fn push(
&mut self,
name: impl Into<Cow<'a, str>>,
value: impl Variant + Clone
) -> &mut Self
[src]pub fn push_constant(
&mut self,
name: impl Into<Cow<'a, str>>,
value: impl Variant + Clone
) -> &mut Self
[src]
pub fn push_constant(
&mut self,
name: impl Into<Cow<'a, str>>,
value: impl Variant + Clone
) -> &mut Self
[src]Add (push) a new constant to the Scope
.
Constants are immutable and cannot be assigned to. Their values never change.
Constants propagation is a technique used to optimize an AST
.
Example
use rhai::Scope; let mut my_scope = Scope::new(); my_scope.push_constant("x", 42_i64); assert_eq!(my_scope.get_value::<i64>("x").unwrap(), 42);
pub fn push_constant_dynamic(
&mut self,
name: impl Into<Cow<'a, str>>,
value: Dynamic
) -> &mut Self
[src]
pub fn push_constant_dynamic(
&mut self,
name: impl Into<Cow<'a, str>>,
value: Dynamic
) -> &mut Self
[src]Add (push) a new constant with a Dynamic
value to the Scope.
Constants are immutable and cannot be assigned to. Their values never change.
Constants propagation is a technique used to optimize an AST
.
Example
use rhai::{Dynamic, Scope}; let mut my_scope = Scope::new(); my_scope.push_constant_dynamic("x", Dynamic::from(42_i64)); assert_eq!(my_scope.get_value::<i64>("x").unwrap(), 42);
pub fn rewind(&mut self, size: usize) -> &mut Self
[src]
pub fn rewind(&mut self, size: usize) -> &mut Self
[src]Truncate (rewind) the Scope
to a previous size.
Example
use rhai::Scope; let mut my_scope = Scope::new(); my_scope.push("x", 42_i64); my_scope.push("y", 123_i64); assert!(my_scope.contains("x")); assert!(my_scope.contains("y")); assert_eq!(my_scope.len(), 2); my_scope.rewind(1); assert!(my_scope.contains("x")); assert!(!my_scope.contains("y")); assert_eq!(my_scope.len(), 1); my_scope.rewind(0); assert!(!my_scope.contains("x")); assert!(!my_scope.contains("y")); assert_eq!(my_scope.len(), 0); assert!(my_scope.is_empty());
pub fn set_value(
&mut self,
name: &'a str,
value: impl Variant + Clone
) -> &mut Self
[src]
pub fn set_value(
&mut self,
name: &'a str,
value: impl Variant + Clone
) -> &mut Self
[src]Update the value of the named entry in the Scope
.
Search starts backwards from the last, and only the first entry matching the specified name is updated. If no entry matching the specified name is found, a new one is added.
Panics
Panics when trying to update the value of a constant.
Example
use rhai::Scope; let mut my_scope = Scope::new(); my_scope.push("x", 42_i64); assert_eq!(my_scope.get_value::<i64>("x").unwrap(), 42); my_scope.set_value("x", 0_i64); assert_eq!(my_scope.get_value::<i64>("x").unwrap(), 0);
pub fn get_mut(&mut self, name: &str) -> Option<&mut Dynamic>
[src]
pub fn get_mut(&mut self, name: &str) -> Option<&mut Dynamic>
[src]Get a mutable reference to an entry in the Scope
.
If the entry by the specified name is not found, of if it is read-only,
None
is returned.
Example
use rhai::Scope; let mut my_scope = Scope::new(); my_scope.push("x", 42_i64); assert_eq!(my_scope.get_value::<i64>("x").unwrap(), 42); let ptr = my_scope.get_mut("x").unwrap(); *ptr = 123_i64.into(); assert_eq!(my_scope.get_value::<i64>("x").unwrap(), 123);
pub fn iter(&self) -> impl Iterator<Item = (&str, bool, Dynamic)>
[src]
pub fn iter(&self) -> impl Iterator<Item = (&str, bool, Dynamic)>
[src]Get an iterator to entries in the Scope
.
Shared values are flatten-cloned.
Example
use rhai::{Dynamic, Scope}; let mut my_scope = Scope::new(); my_scope.push("x", 42_i64); my_scope.push_constant("foo", "hello"); let mut iter = my_scope.iter(); let (name, is_constant, value) = iter.next().unwrap(); assert_eq!(name, "x"); assert!(!is_constant); assert_eq!(value.cast::<i64>(), 42); let (name, is_constant, value) = iter.next().unwrap(); assert_eq!(name, "foo"); assert!(is_constant); assert_eq!(value.cast::<String>(), "hello");
Trait Implementations
impl<'a, K: Into<Cow<'a, str>>> Extend<(K, Dynamic)> for Scope<'a>
[src]
impl<'a, K: Into<Cow<'a, str>>> Extend<(K, Dynamic)> for Scope<'a>
[src]fn extend<T: IntoIterator<Item = (K, Dynamic)>>(&mut self, iter: T)
[src]
fn extend<T: IntoIterator<Item = (K, Dynamic)>>(&mut self, iter: T)
[src]Extends a collection with the contents of an iterator. Read more
fn extend_one(&mut self, item: A)
[src]
fn extend_one(&mut self, item: A)
[src]extend_one
)Extends a collection with exactly one element.
fn extend_reserve(&mut self, additional: usize)
[src]
fn extend_reserve(&mut self, additional: usize)
[src]extend_one
)Reserves capacity in a collection for the given number of additional elements. Read more
impl<'a> IntoIterator for Scope<'a>
[src]
impl<'a> IntoIterator for Scope<'a>
[src]Auto Trait Implementations
impl<'a> !RefUnwindSafe for Scope<'a>
impl<'a> !Send for Scope<'a>
impl<'a> !Sync for Scope<'a>
impl<'a> Unpin for Scope<'a>
impl<'a> !UnwindSafe for Scope<'a>
Blanket Implementations
impl<T> BorrowMut<T> for T where
T: ?Sized,
[src]
impl<T> BorrowMut<T> for T where
T: ?Sized,
[src]pub fn borrow_mut(&mut self) -> &mut T
[src]
pub fn borrow_mut(&mut self) -> &mut T
[src]Mutably borrows from an owned value. Read more
impl<T> CallHasher for T where
T: Hash + ?Sized,
[src]
impl<T> CallHasher for T where
T: Hash + ?Sized,
[src]impl<T> ToOwned for T where
T: Clone,
[src]
impl<T> ToOwned for T where
T: Clone,
[src]type Owned = T
type Owned = T
The resulting type after obtaining ownership.
pub fn to_owned(&self) -> T
[src]
pub fn to_owned(&self) -> T
[src]Creates owned data from borrowed data, usually by cloning. Read more
pub fn clone_into(&self, target: &mut T)
[src]
pub fn clone_into(&self, target: &mut T)
[src]🔬 This is a nightly-only experimental API. (toowned_clone_into
)
recently added
Uses borrowed data to replace owned data, usually by cloning. Read more