role Sequence does PositionalBindFailover { }
This role implements a series of methods for converting sequences and accessing their elements. These methods should work on all sequences: serial Seq
, ordered parallel HyperSeq
, and unordered parallel RaceSeq
.
These methods have in common that they all access the underlying iterator if the sequence has not been cached yet. Therefore they will throw an error of type X::Seq::Consumed
if called on a Seq
that was already consumed.
Methods§
method Str§
multi method Str(::?CLASS:D:)
Stringifies the cached sequence.
method Stringy§
multi method Stringy(::?CLASS:D:)
Calls .Stringy
on the cached sequence.
method Numeric§
method Numeric(::?CLASS:D:)
Returns the number of elements in the cached sequence.
method AT-POS§
multi method AT-POS(::?CLASS:D: Int:D $idx) multi method AT-POS(::?CLASS:D: int $idx)
Returns the element at position $idx
in the cached sequence.
method EXISTS-POS§
multi method EXISTS-POS(::?CLASS:D: Int:D $idx) multi method EXISTS-POS(::?CLASS:D: int $idx)
Returns a Bool
indicating whether there is an element at position $idx
in the cached sequence.
method eager§
method eager(::?CLASS:D: --> List:D)
Returns an eagerly evaluated List
based on the invocant sequence, and marks it as consumed. If called on an already consumed Seq
, throws an error of type X::Seq::Consumed
.
my $s = lazy 1..5; say $s.is-lazy; # OUTPUT: «True» say $s.eager; # OUTPUT: «(1 2 3 4 5)» say $s.eager; CATCH { when X::Seq::Consumed { say 'Throws exception if already consumed'; } } # OUTPUT: «Throws exception if already consumed»
method fmt§
method fmt($format = '%s', $separator = ' ' --> Str:D)
method gist§
multi method gist(::?CLASS:D:)
Returns the gist of the cached sequence.