reject!()
public
Equivalent to Array#delete_if, deleting elements from self for
which the block evaluates to true, but returns nil if no changes were made.
See also Enumerable#reject and
Array#delete_if.
If no block is given, an enumerator is returned instead.
Show source
static VALUE
rb_ary_reject_bang(VALUE ary)
{
long i1, i2;
RETURN_ENUMERATOR(ary, 0, 0);
rb_ary_modify(ary);
for (i1 = i2 = 0; i1 < RARRAY_LEN(ary); i1++) {
VALUE v = RARRAY_PTR(ary)[i1];
if (RTEST(rb_yield(v))) continue;
if (i1 != i2) {
rb_ary_store(ary, i2, v);
}
i2++;
}
if (RARRAY_LEN(ary) == i2) return Qnil;
if (i2 < RARRAY_LEN(ary))
ARY_SET_LEN(ary, i2);
return ary;
}