instance method
Array#cycle
(?::int? n) { (Elem) -> void } -> nil
(?::int? n) -> ::Enumerator[Elem, nil]
cycle(count = nil) {|element| ... } → nil
cycle(count = nil) → new_enumerator
array.c
View on GitHub ↗
static VALUE
rb_ary_cycle(int argc, VALUE *argv, VALUE ary)
{
long n, i;
rb_check_arity(argc, 0, 1);
RETURN_SIZED_ENUMERATOR(ary, argc, argv, rb_ary_cycle_size);
if (argc == 0 || NIL_P(argv[0])) {
n = -1;
}
else {
n = NUM2LONG(argv[0]);
if (n <= 0) return Qnil;
}
while (RARRAY_LEN(ary) > 0 && (n < 0 || 0 < n--)) {
for (i=0; i<RARRAY_LEN(ary); i++) {
rb_yield(RARRAY_AREF(ary, i));
}
}
return Qnil;
}
With a block given, may call the block, depending on the value of argument count; count must be an integer-convertible object, or nil.
When count is positive, calls the block with each element, then does so repeatedly, until it has done so count times; returns nil:
Example
output = [] [0, 1].cycle(2) {|element| output.push(element) } # => nil output # => [0, 1, 0, 1]
When count is zero or negative, does not call the block:
Example
[0, 1].cycle(0) {|element| fail 'Cannot happen' } # => nil [0, 1].cycle(-1) {|element| fail 'Cannot happen' } # => nil
When count is nil, cycles forever:
Example
# Prints 0 and 1 forever. [0, 1].cycle {|element| puts element } [0, 1].cycle(nil) {|element| puts element }
With no block given, returns a new Enumerator.
Related: see Methods for Iterating.