Enum Closure

Source
pub enum Closure {
    One(String, Procedure),
    Two(String, String, Procedure),
    Primary(Box<Primary>),
}
Expand description

Represents a closure (anonymous function) expression in the AIMX language.

Closures capture their environment and can be used as first-class values. They are typically created using the => operator and can have one or two parameters.

§Variants

  • One(String, Procedure): A closure with a single parameter
  • Two(String, String, Procedure): A closure with two parameters
  • Primary(Box<Primary>): An optimized representation when the closure is a simple primary expression

§Examples

// Parses to Closure::One("x", procedure)
x => x + 1

// Parses to Closure::Two("x", "y", procedure)
(x, y) => x + y

Variants§

§

One(String, Procedure)

§

Two(String, String, Procedure)

§

Primary(Box<Primary>)

Primary flattened AST optimization - used when the closure body is a simple primary expression

Implementations§

Source§

impl Closure

Source

pub fn invoke(&self, context: &mut dyn ContextLike) -> Result<Value>

Invokes the closure with the current context.

This method evaluates the closure body after setting up the parameter bindings in the context. For closures with parameters, the parameters are bound to special context keys (0 for single parameter, 0 and 1 for double parameters).

§Arguments
  • context - The evaluation context
§Returns

Returns Result<Value> containing the result of evaluating the closure body.

§Examples
let mut context = Context::new();
let closure = Closure::One("x".to_string(), Procedure::Primary(Box::new(Primary::Literal(aimx::Literal::Number(42.0)))));
 
// Parameter values are set using the context's key mechanism
let param_name = "x".to_string();
context.set_key(0, &param_name);
let result = closure.invoke(&mut context)?;
// result should be Value::Literal(Literal::Number(42.0))

Trait Implementations§

Source§

impl Clone for Closure

Source§

fn clone(&self) -> Closure

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Closure

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Display for Closure

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the closure for display.

This implementation uses the Writable trait to format the closure as a string suitable for user display.

§Arguments
  • f - The formatter to write to
§Returns

Returns fmt::Result indicating success or failure.

Source§

impl ExpressionLike for Closure

Source§

fn evaluate(&self, context: &mut dyn ContextLike) -> Result<Value>

Evaluates the closure expression.

For primary closures (optimized simple expressions), this evaluates the expression directly. For parameterized closures, this returns a Value::Closure containing the closure itself, since closures with parameters need to be invoked with invoke() to evaluate them.

§Arguments
  • context - The evaluation context
§Returns

Returns Result<Value> containing either the evaluated result (for primary closures) or the closure itself as a value (for parameterized closures).

§Examples
let mut context = Context::new();
let closure = Closure::Primary(Box::new(Primary::Literal(aimx::Literal::Number(42.0))));
let result = closure.evaluate(&mut context)?;
// result should be Value::Literal(Literal::Number(42.0))
Source§

fn write(&self, writer: &mut Writer)

Writes the closure expression to a writer.

This method formats the closure according to its variant and writes it to the provided writer. The output matches the AIMX syntax for closures.

§Arguments
  • writer - The writer to write the formatted closure to
Source§

fn to_sanitized(&self) -> String

Returns a sanitized string representation of the closure.

Sanitized output is suitable for display to users and may include formatting that makes the expression easier to read.

§Returns

Returns a String containing the sanitized closure representation.

Source§

fn to_formula(&self) -> String

Returns a formula string representation of the closure.

Formula output is suitable for use as input to the parser and matches the exact AIMX syntax.

§Returns

Returns a String containing the formula representation.

Source§

impl PartialEq for Closure

Source§

fn eq(&self, other: &Closure) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl StructuralPartialEq for Closure

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

§

impl<T> PolicyExt for T
where T: ?Sized,

§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns [Action::Follow] only if self and other return Action::Follow. Read more
§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns [Action::Follow] if either self or other returns Action::Follow. Read more
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T> ToString for T
where T: Display + ?Sized,

Source§

fn to_string(&self) -> String

Converts the given value to a String. Read more
§

impl<T> ToStringFallible for T
where T: Display,

§

fn try_to_string(&self) -> Result<String, TryReserveError>

ToString::to_string, but without panic on OOM.

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where T: 'static,