pub struct Func {
pub vars: Vec<Symbol>,
pub body_cas: Option<CasExpr>,
pub body_native: Option<NativeFn>,
pub metadata: FuncMetadata,
}Expand description
A callable function value in the Func number domain: its bound variables
plus an optional symbolic (CAS) body and/or native body.
Fields§
§vars: Vec<Symbol>The ordered parameter symbols bound when the function is invoked.
body_cas: Option<CasExpr>The symbolic body, when the function can be expressed as a CAS expression.
body_native: Option<NativeFn>The native body, used when no symbolic body is available.
metadata: FuncMetadataOut-of-band metadata describing the function.
Implementations§
Source§impl Func
impl Func
Sourcepub fn new(
vars: Vec<Symbol>,
body_cas: Option<CasExpr>,
body_native: Option<NativeFn>,
metadata: FuncMetadata,
) -> Self
pub fn new( vars: Vec<Symbol>, body_cas: Option<CasExpr>, body_native: Option<NativeFn>, metadata: FuncMetadata, ) -> Self
Builds a function from its variables, optional symbolic and native bodies, and metadata.
Sourcepub fn symbolic(vars: Vec<Symbol>, body_cas: CasExpr) -> Self
pub fn symbolic(vars: Vec<Symbol>, body_cas: CasExpr) -> Self
Builds a function with a symbolic (CAS) body and default metadata.
Sourcepub fn native(vars: Vec<Symbol>, body_native: NativeFn) -> Self
pub fn native(vars: Vec<Symbol>, body_native: NativeFn) -> Self
Builds a function with a native (Rust closure) body and default metadata.
§Examples
use std::sync::Arc;
use sim_kernel::Symbol;
use sim_lib_numbers_func::Func;
let func = Func::native(
vec![Symbol::new("x")],
Arc::new(|_cx, args| Ok(args[0].clone())),
);
assert_eq!(func.vars, vec![Symbol::new("x")]);
assert!(func.body_cas.is_none());
assert!(func.body_native.is_some());Trait Implementations§
Source§impl Callable for Func
impl Callable for Func
Source§fn call(&self, cx: &mut Cx, args: Args) -> Result<Value>
fn call(&self, cx: &mut Cx, args: Args) -> Result<Value>
Invoke the callable with already-evaluated, checked
Args.Source§fn browse_args_shape(&self, _cx: &mut Cx) -> Result<Option<Value>, Error>
fn browse_args_shape(&self, _cx: &mut Cx) -> Result<Option<Value>, Error>
Optional shape describing the accepted argument list, for browsing.
Source§impl Citizen for Func
impl Citizen for Func
Source§fn citizen_symbol() -> Symbol
fn citizen_symbol() -> Symbol
The citizen’s
namespace/name class symbol.Source§fn citizen_version() -> u32
fn citizen_version() -> u32
The citizen’s encoding version.
Source§fn citizen_arity() -> usize
fn citizen_arity() -> usize
Number of constructor fields (excluding the version argument).
Source§fn citizen_fields() -> &'static [&'static str]
fn citizen_fields() -> &'static [&'static str]
The citizen’s field names, in constructor order.
Source§impl NumberValue for Func
impl NumberValue for Func
Source§fn number_domain(&self, _cx: &mut Cx) -> Result<Symbol>
fn number_domain(&self, _cx: &mut Cx) -> Result<Symbol>
The number domain this value reports membership in.
Source§fn number_literal(&self, _cx: &mut Cx) -> Result<Option<NumberLiteral>, Error>
fn number_literal(&self, _cx: &mut Cx) -> Result<Option<NumberLiteral>, Error>
Canonical literal form, or
Ok(None) when not representable.Source§impl Object for Func
impl Object for Func
Source§fn display(&self, cx: &mut Cx) -> Result<String>
fn display(&self, cx: &mut Cx) -> Result<String>
Render the object as a human-readable display string.
Source§fn header(&self) -> &ObjectHeader
fn header(&self) -> &ObjectHeader
Identity and trust header for the object; defaults to the shared
anonymous header.
Source§fn op(&self, _key: &OpKey) -> Option<&dyn Op>
fn op(&self, _key: &OpKey) -> Option<&dyn Op>
Resolve the operation registered under
key, if any.Source§impl ObjectCompat for Func
impl ObjectCompat for Func
Source§fn class(&self, cx: &mut Cx) -> Result<ClassRef>
fn class(&self, cx: &mut Cx) -> Result<ClassRef>
Class object this value belongs to; defaults to nil.
Source§fn as_expr(&self, cx: &mut Cx) -> Result<Expr>
fn as_expr(&self, cx: &mut Cx) -> Result<Expr>
Expression form of the object; defaults to an opaque extension node.
Source§fn as_table(&self, cx: &mut Cx) -> Result<Value>
fn as_table(&self, cx: &mut Cx) -> Result<Value>
Project the object into a table value; the default exposes its display.
Source§fn as_callable(&self) -> Option<&dyn Callable>
fn as_callable(&self) -> Option<&dyn Callable>
Callable view, if the object can be invoked.
Source§fn as_number_value(&self) -> Option<&dyn NumberValue>
fn as_number_value(&self) -> Option<&dyn NumberValue>
Number-value view, if the object is a domain number.
Source§fn as_object_encoder(&self) -> Option<&dyn ObjectEncode>
fn as_object_encoder(&self) -> Option<&dyn ObjectEncode>
Object-encoder view, if the object encodes other objects.
Source§fn as_read_constructor(&self) -> Option<&dyn ReadConstructor>
fn as_read_constructor(&self) -> Option<&dyn ReadConstructor>
Read-constructor view, if the object decodes data forms.
Source§fn as_number_domain(&self) -> Option<&(dyn NumberDomain + 'static)>
fn as_number_domain(&self) -> Option<&(dyn NumberDomain + 'static)>
Number-domain view, if the object is a number domain.
Source§fn as_eval_fabric(&self) -> Option<&dyn EvalFabric>
fn as_eval_fabric(&self) -> Option<&dyn EvalFabric>
Eval-fabric view, if the object is a distributed eval surface.
Source§fn as_sequence(&self) -> Option<&dyn Sequence>
fn as_sequence(&self) -> Option<&dyn Sequence>
Sequence view, if the object is a sequence.
Source§fn as_list(&self) -> Option<&(dyn ListValue + 'static)>
fn as_list(&self) -> Option<&(dyn ListValue + 'static)>
List view, if the object is a list value.
Source§fn as_table_impl(&self) -> Option<&(dyn Table + 'static)>
fn as_table_impl(&self) -> Option<&(dyn Table + 'static)>
Table-implementation view, if the object is a table.
Source§fn as_dir(&self) -> Option<&(dyn Dir + 'static)>
fn as_dir(&self) -> Option<&(dyn Dir + 'static)>
Directory view, if the object is a directory.
Source§impl ObjectEncode for Func
impl ObjectEncode for Func
Source§fn object_encoding(&self, cx: &mut Cx) -> Result<ObjectEncoding>
fn object_encoding(&self, cx: &mut Cx) -> Result<ObjectEncoding>
Returns the
ObjectEncoding this object should be rendered as.Auto Trait Implementations§
impl !RefUnwindSafe for Func
impl !UnwindSafe for Func
impl Freeze for Func
impl Send for Func
impl Sync for Func
impl Unpin for Func
impl UnsafeUnpin for Func
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
Mutably borrows from an owned value. Read more