Fix nth/2 to emit empty on index out of range
This commit is contained in:
1 parent
e2bc8de8bb
commit
d8072564c2
3 files changed
+11
-7
No files matched your search
@@ -2832,10 +2832,8 @@ sections:
|
||||
The `first(expr)` and `last(expr)` functions extract the first
|
||||
and last values from `expr`, respectively.
|
||||
|
||||
The `nth(n; expr)` function extracts the nth value output by
|
||||
`expr`. This can be defined as `def nth(n; expr):
|
||||
last(limit(n + 1; expr));`. Note that `nth(n; expr)` doesn't
|
||||
support negative values of `n`.
|
||||
The `nth(n; expr)` function extracts the nth value output by `expr`.
|
||||
Note that `nth(n; expr)` doesn't support negative values of `n`.
|
||||
|
||||
examples:
|
||||
- program: '[first(range(.)), last(range(.)), nth(./2; range(.))]'
|
||||
|
||||
+3
-1
@@ -163,7 +163,9 @@ def any(condition): any(.[]; condition);
|
||||
def all: all(.[]; .);
|
||||
def any: any(.[]; .);
|
||||
def last(g): reduce g as $item (null; $item);
|
||||
def nth($n; g): if $n < 0 then error("nth doesn't support negative indices") else last(limit($n + 1; g)) end;
|
||||
def nth($n; g):
|
||||
if $n < 0 then error("nth doesn't support negative indices")
|
||||
else label $out | foreach g as $item ($n + 1; . - 1; if . <= 0 then $item, break $out else empty end) end;
|
||||
def first: .[0];
|
||||
def last: .[-1];
|
||||
def nth($n): .[$n];
|
||||
|
||||
+6
-2
@@ -319,9 +319,13 @@ null
|
||||
"badness"
|
||||
[1]
|
||||
|
||||
[first(range(.)), last(range(.)), nth(0; range(.)), nth(5; range(.)), try nth(-1; range(.)) catch .]
|
||||
[first(range(.)), last(range(.))]
|
||||
10
|
||||
[0,9,0,5,"nth doesn't support negative indices"]
|
||||
[0,9]
|
||||
|
||||
[nth(0,5,9,10,15; range(.)), try nth(-1; range(.)) catch .]
|
||||
10
|
||||
[0,5,9,"nth doesn't support negative indices"]
|
||||
|
||||
# Check that first(g) does not extract more than one value from g
|
||||
first(1,error("foo"))
|
||||
|
||||
Reference in new issue
Block a user