From 1e9a5eda48c65096b482b396d550d139a4c2e61d Mon Sep 17 00:00:00 2001 From: Laurenz Date: Tue, 26 Jul 2022 23:17:06 +0200 Subject: Rework array methods --- src/eval/methods.rs | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) (limited to 'src/eval/methods.rs') diff --git a/src/eval/methods.rs b/src/eval/methods.rs index 1ac0ce61..0e6f5af4 100644 --- a/src/eval/methods.rs +++ b/src/eval/methods.rs @@ -27,6 +27,8 @@ pub fn call( Value::Array(array) => match method { "len" => Value::Int(array.len()), + "first" => array.first().cloned().unwrap_or(Value::None), + "last" => array.last().cloned().unwrap_or(Value::None), "slice" => { let start = args.expect("start")?; let mut end = args.eat()?; @@ -35,12 +37,17 @@ pub fn call( } Value::Array(array.slice(start, end).at(span)?) } - "map" => Value::Array(array.map(vm, args.expect("function")?)?), + "contains" => Value::Bool(array.contains(&args.expect("value")?)), + "find" => array.find(vm, args.expect("function")?)?.unwrap_or(Value::None), + "position" => array + .position(vm, args.expect("function")?)? + .map_or(Value::None, Value::Int), "filter" => Value::Array(array.filter(vm, args.expect("function")?)?), + "map" => Value::Array(array.map(vm, args.expect("function")?)?), + "any" => Value::Bool(array.any(vm, args.expect("function")?)?), + "all" => Value::Bool(array.all(vm, args.expect("function")?)?), "flatten" => Value::Array(array.flatten()), - "find" => array - .find(vm, args.expect("value or function")?)? - .map_or(Value::None, Value::Int), + "rev" => Value::Array(array.rev()), "join" => { let sep = args.eat()?; let last = args.named("last")?; -- cgit v1.2.3