pub fn lka_eval(expr: &str, scope: &dyn LkEnv) -> LkResult<Vec<u8>>
Expand description
Evaluate an expression to bytes.
Print a list of functions by using lka_eval("[help]")
Optionally add a point
in the scope.
See lka_eval_strict that is less strict on its input
assert_eq!( b"abc" as &[u8] , lka_eval( "abc" ,())?, );
assert_eq!( &[0u8,1,255] as &[u8], lka_eval( r#"\0\x01\xff"# ,())?,);
// calling functions such as 'u8'
assert_eq!( b"abc" as &[u8] , lka_eval( "ab[u8:99]" ,())?, );
assert_eq!(
b"The '' function returns its first argument" as &[u8],
lka_eval( "The '' function returns its first [:argument]", ())?
);
assert_eq!(
b"Bytes are joined" as &[u8],
lka_eval( "Bytes[: are][: joined]" , ())?
);
let result = lka_eval( "Nest expressions [u8:65] == [u8:[:65]] == \x41" , ())?;
assert_eq!(result, b"Nest expressions A == A == A");
let result = lka_eval( "Use result as first argument with '/' [u8:65] == [:65/u8] == \x41" , ())?;
assert_eq!(result, b"Use result as first argument with '/' A == A == A");
let result = lka_eval( "You can provide an argv [0] [1]" , &[b"like" as &[u8], b"this"])?;
assert_eq!(result, b"You can provide an argv like this");
let lp : PointBox = lk_linkpoint(&[], b"mydomain", &[])?;
let point: &dyn Point = &lp;
assert_eq!( lka_eval( "[hash]" , point)?,&*point.hash());
let by_arg = lka_eval( "[hash:str]", point)?;
let by_apply = lka_eval( "[hash/?b]", point)?;
let as_field = point.hash().b64().into_bytes();
assert_eq!( by_arg, by_apply);
assert_eq!( by_arg, as_field);
// or provide both at once with (point,&[b"argv"])
// escaped characters
assert_eq!( lka_eval( r#"\n\t\:\/\\\[\]"# ,())?, &[b'\n',b'\t',b':',b'/',b'\\',b'[',b']'] );